hance 2018-01-11
环境:
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.在extendsResourceConfig的类中:
这样写表示用LoggingFeature中缺省的JUL的日志级别FINE
2.在tomcat/conf/logging.properties的最后增加一行
这个修改后,jersey的requst/response日志只能输出catalina.xxx.log中,并且tomcat控制台并没有显示。
然后再修改下tomcat/conf/logging.properties,把
改成
这样,控制台就能看到jersey的request/response的日志输出了。
方法二,把jersey日志输出有log4j2来接管,把日志文件输出到统一的业务日志文件中,并通过log4j2.xml的配置来控制jersey日志的输出。
1.在extendsResourceConfig的类中:
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,内容自己配置:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="off" monitorInterval="30"> <Properties> <Property name="log-path">${sys:user.dir}/logs</Property> </Properties> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="LOG4J2 %d [%t] %p %C.%M()/%L - %msg%xEx%n"/> </Console> <File name="file_log" fileName="${log-path}/test.log"> <PatternLayout pattern="LOG4J2 %d [%t] %p %C.%M()/%L - %msg%xEx%n"/> </File> </Appenders> <Loggers> <Logger name="com.joey" level="DEBUG" additivity="false"> <appender-ref ref="STDOUT"/> <appender-ref ref="file_log"/> </Logger> <!-- LoggingFeature的缺省级别是JUL的FINE,和log4j2中的DEBUG对应, 因此, 这里写DEBUG,相当于打开了jersey的request/response日志; 这里写INFO,相当于关闭了jersey的request/response日志 --> <Logger name="org.glassfish.jersey.logging" level="DEBUG" additivity="false"> <appender-ref ref="STDOUT"/> <appender-ref ref="file_log"/> </Logger> <Root level="INFO"> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </configuration>
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的配置,能动态控制日志的输出级别。