Мне нужно перенаправить журнал запросов / ответов Джерси на мой log4j2.
У меня включено ведение журнала Джерси с помощью этого кода на моем ApplicationJAXRS extends Application
:
@Override
public Set<Class<?>> getClasses() {
return new HashSet<Class<?>>() {{
add(LoggingFilter.class);
}};
}
Кажется, что Джерси использует JUL (ведение журнала Java) внутри, а вывод по умолчанию - STDOUT. В этот момент я вижу STDOUT на консоли Eclipse.
В документации Log4j2 есть раздел об адаптере журналирования JDK. Это говорит
Чтобы использовать адаптер ведения журнала JDK, необходимо установить для системного свойства java.util.logging.manager значение org.apache.logging.log4j.jul.LogManager.
Это необходимо сделать либо через командную строку (т. Е. С помощью аргумента -Djava.util.logging.manager = org.apache.logging.log4j.jul.LogManager) или с помощью System.setProperty () strong > перед выполнением каких-либо вызовов LogManager или Logger.
Чтобы вызвать System.setProperty(*)
перед любым вызовом Logger, я попытался поместить его в @PostConstruct
в моем классе Aplication
.
@PostConstruct
public void init() {
System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
}
Я мог бы заставить его входить в мои файлы журналов.
Это мой log4j2.xml:
<Appenders>
<RollingFile name="RollingFile" fileName="${log-path}/${name}.log"
filePattern="${log-path}/${date:yyyy-MM}/${name}-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>%d{dd-MM-yy HH:mm:ss,SSS} %-5p [%t] (%F:%L) - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
<DefaultRolloverStrategy max="10" />
</RollingFile>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" level="debug"/>
<AppenderRef ref="RollingFile" level="debug"/>
</Root>
</Loggers>
</Configuration>