【发布时间】:2018-05-04 14:40:39
【问题描述】:
我想根据访问应用程序的 TEST/PROD 服务器动态更改日志级别。
我们的 web 应用程序有很多 DEBUG 和 INFO,错误日志语句。一旦我们将 .war 文件部署到测试/生产服务器,
log4j.xml 也被部署,导致日志文件中有大量 DEBUG 和 INFO 语句。
如何在 PROD 服务器中仅显示错误日志,在 DEV/TEST 服务器中显示调试和错误日志。 Apache Tomcat 是我们用来部署应用程序的服务器。
log4j.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<!-- This appender logs to the console -->
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%-5p] [%c{1}] [%M:%L] - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="${catalina.home}/logs/myProject.log"/>
<param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L %m %n" />
</layout>
</appender>
<!-- Set "debug" log level for project code -->
<logger name="com.choonchernlim.myproject">
<level value="info"/>
</logger>
<!-- Set "info" log level for Spring framework -->
<logger name="org.springframework">
<level value="info"/>
</logger>
<!-- Set "debug" log level for Hibernate framework -->
<logger name="org.hibernate">
<level value="debug"/>
</logger>
<root>
<!-- The default log level is "warn" -->
<priority value="warn"/>
<appender-ref ref="consoleAppender"/>
</root>
</log4j:configuration>
在 web.xml 中包含以下标签:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.xml</param-value>
</context-param>
我能想到的一种方法是从apachetomcatserver\bin 编辑setenv.bat 并添加loglevel。但是如何在log4j.xml文件中动态设置loglevels???
在 tomcatserver 中:catalinahome\bin\setenv.bat
set loglevel=error
如何动态设置loglevel,这样当应用程序部署在 TEST 中时,所有日志都会显示,而在 PROD 中部署时,日志文件中只会显示错误日志消息。
我正在使用log4j1.2,spring,java。
【问题讨论】: