java - AbstractNCSARequestLog 不适用于 log4j
问题描述
我正在使用 Java Spark(Web 框架)并且我正在关注本教程:http ://sparkjava.com/tutorials/jetty-request-log以启用日志记录。
但是,以下课程给了我一个错误:
constructor AbstractNCSARequestLog in class AbstractNCSARequestLog cannot be applied to given types;
return new AbstractNCSARequestLog() {
^
required: Writer
found: no arguments
有问题的班级:
public class RequestLogFactory {
private Logger logger;
public RequestLogFactory(Logger logger) {
this.logger = logger;
}
AbstractNCSARequestLog create() {
return new AbstractNCSARequestLog() {
@Override
protected boolean isEnabled() {
return true;
}
@Override
public void write(String s) throws IOException {
logger.info(s);
}
};
}
}
解决方案
如果您想使用老式的 NCSA 请求日志格式,请使用
Slf4jRequestLog
代替AbstractNCSARequestLog
(现在两者都已弃用)。
如果您想使用现代RequestLog
技术,请CustomRequestLog
使用Slf4jRequestLogWriter
. (额外的好处是能够自定义请求日志格式)
使用其中任何一种方法,您都需要将 slf4j 路由到 log4j(通过slf4j-log4j12-<ver>.jar
在类路径中包含 )
然后您现在可以在命名记录器上捕获您的请求日志(记录器名称可在 中配置Slf4jRequestLogWriter
)
例子:
Slf4jRequestLogWriter slf4jWriter = new Slf4jRequestLogWriter();
// The name of the logger to write request logs to
slf4jWriter.setLoggerName("my.requestlog");
CustomRequestLog requestLog = new CustomRequestLog(slf4jWriter, CustomRequestLog.NCSA_FORMAT);
server.setRequestLog(requestLog);
推荐阅读
- python - 如何将多个文本文件加载到 Google 文本转语音中?
- android - POS蓝牙打印机在启动时留下一些边距,然后在Android App中开始打印
- javascript - new Date().getTime() 在 JavaScript 中显示 NaN
- python - 在滚动视图中按下按钮以切换到另一个屏幕 [Kivy]
- react-native - 世博会弹出后反应本机问题
- sql - 查询以使用 like 运算符连接两个表
- google-chrome-extension - 替换页面上的文本值或显示与网站上显示的 id 匹配的值的叠加层
- python - RandomizedSearchCV Pipeline 使用mutual_info_classif 选择SelectPercentile 的超参数
- c# - 如何使用 Android 的统一从 URL 加载 JSON?
- c++ - Stack - 符号余额检查器