我需要将 Jersey 请求/响应日志重定向到我的 log4j2。
我通过在我的设备上使用此代码启用了 Jersey 日志记录ApplicationJAXRS extends Application
:
@Override
public Set<Class<?>> getClasses() {
return new HashSet<Class<?>>() {{
add(LoggingFilter.class);
}};
}
Jersey 似乎在内部使用 JUL(Java Logging),默认输出是 STDOUT。此时我可以在 Eclipse Console 上看到 STDOUT。
Log4j2 文档有一节关于JDK 日志适配器 http://logging.apache.org/log4j/2.0/log4j-jul/index.html。
它说
要使用 JDK Logging Adapter,您必须设置系统属性java.util.logging.manager to org.apache.logging.log4j.jul.LogManager
这必须通过命令行(即使用 -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager 参数)或使用系统.setProperty()在对 LogManager 或 Logger 进行任何调用之前。
要致电System.setProperty(*)
在任何 Logger 调用之前,我尝试将其放在@PostConstruct
in my Aplication
class.
@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>