gpt4 book ai didi

java - Apache CXF 和 Log4j2

转载 作者:行者123 更新时间:2023-12-02 03:08:03 32 4
gpt4 key购买 nike

我在独立的 Java 应用程序中运行嵌入式 JAX-RS Web 服务。我使用 Apache CXF 3.3.0 和 jetty 作为 Web 容器。我还使用 Spring 来配置 Jetty 和服务 bean。

我的应用程序使用 log4j2,我正在尝试记录 CXF 容器收到的 URL 以进行故障排除。

我在WebService接口(interface)中添加了以下注释:

@InInterceptors(interceptors = "org.apache.cxf.interceptor.LoggingInInterceptor")

由于我使用 Jetty 而不是 servlet 容器,因此此处记录的说明不起作用: Apache CXF - General CXF Logging

当我在 Eclipse 中运行应用程序时,URL 将以红色打印到控制台。我使用红色来记录 stderr。

但是 log4j 日志文件中不存在输出,使用 bash 重定向这些描述符时,输出也不会发送到 stderr 或 stdout:

1> ${LOG_DIR}/stdout.log \
2> ${LOG_DIR}/stderr.log &

最佳答案

我无法通过使用 org.apache.cxf.interceptor.LoggingInInterceptor 和 log4j2 来记录 REQUEST_URL

通过创建自己的 InInterceptor 类,我能够轻松解决这个问题。

下面的类很好地将传入的 REQUEST_URL 记录到我的 log4j2 附加程序:

public class RefDataInInterceptor extends AbstractPhaseInterceptor<Message> {
private static final Logger log =
LogManager.getLogger(RefDataInInterceptor.class);

public RefDataInInterceptor() {
super(Phase.RECEIVE);
}

@Override
public void handleMessage(Message msg) throws Fault {
log.info(msg.getContextualProperty(Message.REQUEST_URL));
}
}

我所要做的就是将其连接起来:

@InInterceptors(interceptors = "org.apache.cxf.interceptor.LoggingInInterceptor")

与:

@InInterceptors(interceptors = "com.aqua.refdata.RefDataInInterceptor")

这是 log4j2 输出到控制台和日志文件的内容:

2019-07-12 16:13:54.811 [3710][qtp172794870-21][INFO http://localhost:9000/refdata/exec/getDBParam
eters [RefDataInInterceptor.java:19]

关于java - Apache CXF 和 Log4j2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57010272/

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