我想在日志文件中记录服务器的请求/响应。我正在使用Springboot球衣2. x log4j2。我像这样注册了泽西的日志功能-
jerseyConfig.register(
new LoggingFeature(
java.util.logging.Logger.getLogger(
LoggingFeature.DEFAULT_LOGGER_NAME),
java.util.logging.Level.SEVERE,
LoggingFeature.Verbosity.PAYLOAD_ANY,
Integer.MAX_VALUE)
);
log4j2。xml
<!-- Jersey logger -->
<AsyncLogger name="org.glassfish" level="all" additivity="false">
<AppenderRef ref="Console" level="off" />
<AppenderRef ref="RollingFileIO" level="error" />
</AsyncLogger>
在模式中,我在log4j2的ThreadContext
的帮助下注入事务id。我的pom中有log4j jul 2.1
。xml,我正在使用它运行它
-Djava。util。登录中。manager=org。阿帕奇。登录中。log4j。七月。日志管理器
。
一切正常,唯一的问题是,在jersey的日志中,我无法插入事务id。我使用自定义代码尝试了utils日志,并且我能够将事务id放入其中。但当jersey写入这些日志时,ThreadContext被清除,事务id值变为空。
我没有详细介绍Jersey,但从问题描述来看,它似乎有一个线程模型,这使得使用ThreadContext
非常困难。
幸运的是,Log4j 2.7提供了一种工具,允许您将键值对(如ID)注入来自ThreadContext以外的另一个源的日志事件中。引入它是为了帮助使用异步框架,比如Finagle,因此它也可能对Jersey有用。
Log4j2手册在Custom ContextDataInjectors一节中简要介绍了此功能。
如果要使用此功能,需要编写一个自定义的ContextDataInjector
,并通过指定ContextDataInjectorFactory
告诉Log4j使用该注入器而不是默认注入器。您的自定义注入器需要从某处获取键值对。在泽西岛的情况下,他会请求上下文。getProperty和setProperty是否合适?
如果日志流为JUL-
在写入日志时包括线程上下文:
PatternLayout提供打印ThreadContext映射和堆栈内容的机制。
单独使用%X
可包含地图的全部内容
使用%X{key}
包含指定的键
使用%x
包含堆栈的全部内容
如果流量
log4j2-
文档中的所有示例都显示
ThreadContext
是在调用记录器之前设置的。这意味着您必须在执行任何代码之前设置ThreadContext
。
问题内容: 我有灰熊提供的球衣。 我有一个实现类。但是,为所有传入请求创建一次此类。因此,这样做: 该为空。我可以将上下文注入到被调用的实际端点中,但这相当粗陋和丑陋,对我来说真的没有用;因为我希望记录各种请求。理想情况下,希望在请求的ResponseFilter端获取此对象。 必须有一种简单的方法来执行此操作。到目前为止,我所看到的所有问题/答案都不适用于Grizzly,也无法插入REST端点调
过滤器类 资源类别
我有一个方法 我可能更容易获得查询参数的映射。
null 所以我创建了SFFactory类并在ApplicationConfig中注册它。 Sffactory.java ApplicationConfig.java
我已经尝试了这里列出的技术:将EJB注入JAX-RS(RESTful服务) 这里的直接注入技术只是给出一个。技术提供了,因为它似乎是在提取本地接口的完全限定名。更改代码只使用接口名称似乎没有帮助。 我在耳朵里包装。EJB在JAR中,Jersey资源在WAR中。 在WebLogic10.3.6上的Java EE5上EJB注入到Jersey中是可能的吗?
问题内容: 从头开始,在没有任何Jersey 1.x知识的情况下,我很难理解如何在Jersey 2.0项目中设置依赖项注入。 我也知道HK2在Jersey 2.0中可用,但是我似乎找不到帮助Jersey 2.0集成的文档。 pom.xml 我可以让容器启动并使用我的资源,但是一旦我将@Inject添加到MyService,框架就会引发异常: 问题答案: 你需要定义一个并将其注册到你的JAX-RS应