尝试找出activeweb日志记录到一个单独的文件

时间:2018-08-13 20:17:22

标签: activeweb

我正在尝试使用默认的活动Web库将所有内容记录到单独的日志文件中。现在,我正在IntelliJ下运行所有​​内容(通过mvn jetty:run),并且所有日志记录仅在控制台中显示。

我尝试在WEB-INF目录中添加一个log4j.properties文件;没用(我没有在我的pom中添加log4j依赖项,因为我不想在其中添加它)。

寻找slf4j,我找不到任何属性或配置文件来让我定义如何记录到特定的日志文件。而且,我不确定AW使用什么日志,因此很难看到需要配置什么。

这时卡住了,然后通过slf4j网站进行谷歌搜索和阅读以尝试使它工作。

1 个答案:

答案 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支付的费用较少,但是为了以防万一,我们会保留完整的文件。