log4j.properties не влияет на вход в систему в activeJDBC - PullRequest
0 голосов
/ 29 декабря 2018

В настоящее время я работаю над простым веб-приложением, использующим javalite webactive и activeJDBC.Чтобы начать с javalite, я просто использовал https://github.com/javalite/activeweb-simple/ и расширил его оттуда.

Одна вещь, которую я хотел бы изменить, теперь, когда я уже реализовал несколько контроллеров и моделей, я хочу настроить регистратор:

[qtp1442407170-13] INFO org.javalite.activeweb.RequestDispatcher - {"controller":"app.controllers.HomeController","duration_millis":685,"remote_ip":"0:0:0:0:0:0:0:1","method":"GET","action":"index","url":"http://localhost:8080/home/index","status":200}.

Я не совсем понимаю, что представляет собой префикс, поэтому я хотел бы изменить эту часть, чтобы показать дату и метки времени.

После http://javalite.io/logging#log4j-configuration Я должен иметь возможность настроитьвход через log4j.properties в src/main/resources, но это, похоже, не имеет никакого значения.

Содержимое файлов:

log4j.rootLogger=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %4p %c{1} - %m%n

Я подозреваю, что каким-то образом перезаписал регистратор по умолчанию, хотя я ничего не изменил в pom.xml или Main.java.

Я что-то упустил или может быть изменения как-то перезаписаны?

1 Ответ

0 голосов
/ 30 декабря 2018

вот метод, который я использовал во всех моих проектах JavaLite ActiveWeb.Требования:

  1. Я хочу войти в консоль во время разработки - для удобства.
  2. Я хочу войти в файл в любой другой среде
  3. Я хочу, чтобы мой файл журнала имел формат JSON, потому что я могу анализировать его в Splunk, ElasticSearch или любом другом подобном инструменте.

Итак, я увеличил ActiveWeb этим коммитом .

Давайте сделаем это шаг за шагом:

  1. Добавить свойство в файл pom <logger-name>CONSOLE</logger-name>
  2. Добавить файл 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 -

...