试图弄清楚 activeweb 记录到一个单独的文件

Trying to figure out activeweb logging to a separate file

我正在尝试使用默认的活动网络库将所有内容记录到一个单独的日志文件中。现在我 运行 一切都在 IntelliJ 下(通过 mvn jetty:run),所有日志记录都只输出到控制台。

我试过在WEB-INF目录下添加了一个log4j.properties文件;没有用(我没有将 log4j 依赖项添加到我的 pom,因为我不希望它在那里)。

查找 slf4j,我找不到任何属性或配置文件来定义我将如何记录到特定日志文件。而且,我不确定日志记录 AW 使用什么,所以很难看出我需要配置什么。

停留在这一点上,只是通过谷歌搜索和阅读 slf4j 网站来尝试让它工作。

总的来说,如果你想通过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。这样我们在开发的时候就可以在控制台上观察到log了。

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