Попытка выяснить ведение журнала активной сети в отдельный файл

Я пытаюсь использовать активную веб-библиотеку по умолчанию для записи всего в отдельный файл журнала. Прямо сейчас я запускаю все под IntelliJ (через mvn jetty:run), и все логи выходят только на консоль.

Я попытался добавить файл log4j.properties в каталог WEB-INF; не работал (я не добавил log4j-зависимость к моему pom, так как не хочу, чтобы она там была).

Просматривая slf4j, я не могу найти какие-либо свойства или конфигурационный файл, которые позволили бы мне определить, как я буду регистрироваться в конкретном файле журнала. И я не уверен, что протоколирование AW использует, поэтому трудно понять, что мне нужно настроить.

Застрял в этой точке, и просто гуглил и читал через сайт slf4j, чтобы попытаться заставить это работать.

1 ответ

Решение

В общем, если вы хотите, чтобы регистрация выполнялась Log4j и Slf4j, вам нужно будет добавить соответствующие зависимости. Вот конфигурация одного из наших проектов:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
       <version>1.7.5</version>
    </dependency>

это принесет соответствующие deps.

Вот содержимое 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, но на всякий случай сохраняем полные файлы.

Другие вопросы по тегам