вот метод, который я использовал во всех моих проектах JavaLite ActiveWeb.Требования:
- Я хочу войти в консоль во время разработки - для удобства.
- Я хочу войти в файл в любой другой среде
- Я хочу, чтобы мой файл журнала имел формат JSON, потому что я могу анализировать его в Splunk, ElasticSearch или любом другом подобном инструменте.
Итак, я увеличил ActiveWeb этим коммитом .
Давайте сделаем это шаг за шагом:
- Добавить свойство в файл pom
<logger-name>CONSOLE</logger-name>
- Добавить файл log4j.properties с таким содержанием:
`` `
log4j.rootLogger=INFO, ${logger-name}
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %4p [%t]: %c{1} - %m%n
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=logs/activeweb-simple.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.Encoding=UTF-8
log4j.appender.FILE.layout=org.javalite.logging.JsonLog4jLayout
`` `
Добавьте зависимость SLF4J, чтобы интегрировать ее с Log4J:
`` `
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
` ``
Добавить профиль в пом:
<profiles>
<profile>
<id>file_log</id>
<properties>
<logger-name>FILE</logger-name>
</properties>
</profile>
</profiles>
Добавить фильтрацию свойств в pom:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
Давайте посмотрим, как это работает.
Когда вы запускаете программу в среде разработки без профиля, maven заменяет ${logger-name}
в вашем файле log4j.properties
на CONSOLE
.Таким образом, вы используете регистратор CONSOLE, и все выводится на вашу консоль.Если вы запустите вашу программу с профилем -Pfile_log
, то вы, Maven, замените ${logger-name}
на FILE
, поэтому Log4J войдет в соответствующий файл.
Кроме того, обратите внимание, что макет консоли равен org.apache.log4j.ConsoleAppender
, а макет файла - org.javalite.logging.JsonLog4jLayout
.org.javalite.logging.JsonLog4jLayout
- это интеграция JavaLite с Log4J, созданная специально для интеграции с Log4J и получения вывода JSON.
Итак, как вы это используете?В среде разработки вам не нужно делать ничего особенного, это просто работает.Когда вам нужно его собрать, запустите mvn package -Pfile_log
-