Я потратил пару часов, пытаясь понять это, и я полностью потерял его. Я считаю, что новый процесс конфигурации излишне сложный.Как настроить Log4J2
У меня есть сервлет с web.xml файл со следующим:
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///etc/myApp/log4j2.xml</param-value>
</context-param>
Это, кажется, не имеют никакого эффекта. Я использую Tomcat 7.0.42, и я удалил все ссылки на log4j * .jar в файле catalina.properties. Журналы в моем приложении все еще отправляются, но они просто отправляются в System.out без какого-либо форматирования, который я указал.
Итак, я попытался просто сделать это вручную на мой собственный:
InputStream in =
new FileInputStream(new File("/etc/myApp/log4j2.xml"));
ConfigurationSource source = new ConfigurationSource(in);
ConfigurationFactory factory = new XMLConfigurationFactory();
Configuration configuration = factory.getConfiguration(source);
LoggerContext context = (LoggerContext) LogManager.getContext();
context.start(configuration);
context.updateLoggers();
Logger.getLogger("Test").log(Level.INFO, "This is a logging message.");
Во-первых, это, кажется, совершенно запутанным. Ясно, что существует некоторый код, который будет искать разные файлы и предполагать типы файлов на основе их расширений через свойство log4jConfiguration, так почему же нет LogManger.reconfigure(String)
, который имеет тот же эффект?
Во-вторых, это также не имеет никакого эффекта. Опять же, журнал печатается на System.out, и ни одно из запрошенных форматирования не выполняется.
Вот содержание моего log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="LogFile" fileName="/var/log/myApp/myApp.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %p %c{1.} [%t] %m%n"/>
</File>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console" level="DEBUG"/>
<AppenderRef ref="LogFile" level="DEBUG"/>
</Root>
</Loggers>
</Configuration>
Выход в обоих случаях выходит что-то вроде:
Dec 03, 2013 6:06:45 PM test.Test main
INFO: This is a logging message.
Заранее спасибо,
Джон
EDIT: Это действительно работает. Похоже, что я отсутствовал, «log4j-jcl-2.0-beta9.jar». Ответ Ремко Попмы также работает, если «контекст-парам» выше не работает.
Очевидно, что и путь к классам, и контекстный параметр работают в том, что он читается. Я знаю это, потому что, когда развертывается веб-приложение, Tomcat сбрасывает материал Log4J DEBUG в журналы, в том формате, который я хочу. Если я изменю 'status' на' WARN', он не сбрасывает данные в журналы при развертывании приложения. Тем не менее, журналы моего приложения (записанные в общедоступных журналах) по-прежнему не отформатированы, как я хочу, или записываются во внешний файл. У меня есть «commons-logging-api» (а не «commons-logging»), «log4j-api» и «log4j-core» JAR. У меня нет «log4j-commons-impl»; Я даже не вижу его в «log4j-beta9.tar.gz» – jojenki
. Пожалуйста, зайдите на страницу часто задаваемых вопросов log4j2. Он должен помочь вам определить, какие мостовые банки нужно добавить, чтобы вызовы, связанные с голосованием, пересылались в реализацию log4j2. –
Спасибо! Теперь я чувствую себя немного немой. Он работает наполовину (он работает для журналов Spring, но не для меня). Я буду играть с ним больше, но я думаю, что вы решили большинство моих вопросов. – jojenki