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