gpt4 book ai didi

java - 将 Jersey JUL 日志记录重定向到 Log4j2

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:37 26 4
gpt4 key购买 nike

我需要将 Jersey 请求/响应日志重定向到我的 log4j2。

我通过在我的 ApplicationJAXRS extends Application 上使用此代码启用了 Jersey 日志记录:

@Override
public Set<Class<?>> getClasses() {
return new HashSet<Class<?>>() {{
add(LoggingFilter.class);
}};
}

似乎 Jersey 内部使用 JUL(Java Logging),默认输出是 STDOUT。此时我可以在 Eclipse 控制台上看到 STDOUT。

Log4j2 文档中有一节关于 JDK Logging Adapter .它说

To use the JDK Logging Adapter, you must set the system property java.util.logging.manager to org.apache.logging.log4j.jul.LogManager

This must be done either through the command line (i.e., using the -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager argument) or by using System.setProperty() before any calls are made to LogManager or Logger.

要在任何 Logger 调用之前调用 System.setProperty(*),我尝试将它放在 Aplication 中的 @PostConstruct 上> 类。

@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>

最佳答案

我想你必须设置 system property at launch .将代码添加到您的 init 方法以查看设置系统属性是否有效。

@PostConstruct
public void init() {
String cn = "org.apache.logging.log4j.jul.LogManager";
System.setProperty("java.util.logging.manager", cn);
LogManager lm = LogManager.getLogManager();
if (!cn.equals(lm.getClass().getName())) {
try {
ClassLoader.getSystemClassLoader().loadClass(cn);
} catch (ClassNotFoundException cnfe) {
throw new IllegalStateException("Jars not in system class path.", cnfe);
}
throw new IllegalStateException("Found " + lm.getClass().getName() + " set as launch param instead.");
}
}

关于java - 将 Jersey JUL 日志记录重定向到 Log4j2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29174674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com