服务端打印jersey restful请求的request/response

阅读更多
环境:
jersey.version:2.26
log4j.version:2.10.0
tomcat.version:8.5.2


在项目中,我们一般都用log4j2来做业务日志的输出,只要通过配置log4j2.xml,就能很方便的控制业务日志的输出级别,和内容了。
但是,jersey内部是用JUL来做日志输出的,当需要打印jersey的requst/response时,就不是这么好办了,因为JUL不受log4j2.xml的配置影响。

方法一,jersey继续用JUL,而业务日志用log4j2
1.在extends ResourceConfig的类中:
引用
register(LoggingFeature.class);

这样写表示用LoggingFeature中缺省的JUL的日志级别FINE

2.在tomcat/conf/logging.properties的最后增加一行
引用
org.glassfish.jersey.logging.level = FINE


这个修改后,jersey的requst/response日志只能输出catalina.xxx.log中,并且tomcat控制台并没有显示。
然后再修改下tomcat/conf/logging.properties,把
引用
java.util.logging.ConsoleHandler.level = INFO

改成
引用
java.util.logging.ConsoleHandler.level = FINE

这样,控制台就能看到jersey的request/response的日志输出了。



方法二,把jersey日志输出有log4j2来接管,把日志文件输出到统一的业务日志文件中,并通过log4j2.xml的配置来控制jersey日志的输出。
1.在extends ResourceConfig的类中:
引用
register(LoggingFeature.class);


2. 把log4j2的相关类copy到tomcat/libs目录下

copy log4j-api-2.10.0.jar tomcat/libs/
copy log4j-core-2.10.0.jar tomcat/libs/
copy log4j-jul-2.10.0.jar tomcat/libs/


3. 创建 tomcat/conf/log4j2.xml,内容自己配置:



    
        ${sys:user.dir}/logs
    
    
        
            
        
        
           
        
    

    
        
            
            
        
         
         
            
            
        

        
            
        
    



4. 创建 或者 编辑 tomcat/bin/setenv.bat
set CLASSPATH=../libs/log4j-api-2.10.0.jar;../libs/log4j-core-2.10.0.jar;../libs/log4j-jul-2.10.0.jar
set JAVA_OPTS=-Dlog4j.configurationFile=../conf/log4j2.xml
set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager


这样,所有的日志都统一输出到test.log中了。并且通过修改log4j2.xml的配置,能动态控制日志的输出级别。


你可能感兴趣的:(jersey,log4j2)