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的配置,能动态控制日志的输出级别。