根据在服务器上运行的应用程序动态设置级别

时间:2018-05-04 14:40:39

标签: java spring

我想根据访问应用程序的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>

我能想到的一种方法是从setenv.bat修改apachetomcatserver\bin并添加loglevel。但是如何在loglevels文件中动态设置log4j.xml ??? 在tomcatserver中:catalinahome\bin\setenv.bat

set loglevel=error

如何动态设置loglevel,以便在TEST中部署应用程序时显示所有日志,并且在PROD中部署时,日志文件中仅显示错误日志消息。 我正在使用log4j1.2,spring,java

2 个答案:

答案 0 :(得分:0)

您必须为相应的环境创建不同的log4j.xml文件。然后在startUp期间,您可以简单地提供它应该使用的log4j.xml配置的路径。

申请参数:

-Dlog4j.configuration=path/to/env/folder/log4j.xml

答案 1 :(得分:0)

如果您使用的是spring框架,则可以使用logback进行日志记录配置,然后根据活动的spring配置文件控制日志级别。

您可以通过以下示例获得一些帮助 -

http://www.baeldung.com/spring-profiles

https://springframework.guru/using-logback-spring-boot/