我正在尝试使用默认的活动Web库将所有内容记录到单独的日志文件中。现在,我正在IntelliJ下运行所有内容(通过mvn jetty:run),并且所有日志记录仅在控制台中显示。
我尝试在WEB-INF目录中添加一个log4j.properties文件;没用(我没有在我的pom中添加log4j依赖项,因为我不想在其中添加它)。
寻找slf4j,我找不到任何属性或配置文件来让我定义如何记录到特定的日志文件。而且,我不确定AW使用什么日志,因此很难看到需要配置什么。
这时卡住了,然后通过slf4j网站进行谷歌搜索和阅读以尝试使它工作。
答案 0 :(得分:0)
一般来说,如果要通过Log4j和Slf4j完成日志记录,则需要添加适当的依赖项。这是我们其中一个项目的配置:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
这将带来适当的深度。
这是log4j.properties
文件的内容。
log4j.rootLogger=INFO, ${logger-name}, SPLUNK
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.SPLUNK=org.apache.log4j.DailyRollingFileAppender
log4j.appender.SPLUNK.File=${catalina.home}/logs/worker-splunk.log
log4j.appender.SPLUNK.Append=true
log4j.appender.SPLUNK.Encoding=UTF-8
# This is a filter that will filter out junk we do not want to sent to Splunk
log4j.appender.SPLUNK.filter.1=app.utils.SplunkLogFilter
log4j.appender.SPLUNK.layout=org.javalite.logging.JsonLog4jLayout
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=${catalina.home}/logs/worker.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.Encoding=UTF-8
log4j.appender.FILE.layout=org.javalite.logging.JsonLog4jLayout
logger-name
是经过Maven过滤的属性。在本地将其解析为CONSOLE
,在构建应用程序时,它将解析为FILE
。这样,我们可以在开发过程中观察控制台上的日志。
类SplunkLogFilter
看起来像这样:
import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;
public class SplunkLogFilter extends Filter {
private static final String[] EXCLUDED_LOGGERS = new String[]{"***ServiceImpl", "app.utils.ProcessUtil"};
private static final String[] EXCLUDED_MESSAGES = new String[]{"****Command"};
@Override
public int decide(LoggingEvent event) {
String loggerName = event.getLoggerName();
for (String excludedLogger : EXCLUDED_LOGGERS) {
if(loggerName.equals(excludedLogger)){
return Filter.DENY;
}
}
String message = event.getMessage().toString();
for (String excludedMessage : EXCLUDED_MESSAGES) {
if(message.contains(excludedMessage)){
return Filter.DENY;
}
}
return Filter.NEUTRAL;
}
}
因此,我们正在并行登录两个文件,其中一个文件已传送到Splunk中。 Splunk文件较小,因此我们为Splunk支付的费用较少,但是为了以防万一,我们会保留完整的文件。