【问题标题】:dynamically set the level based on the application is run on the server根据应用程序在服务器上运行动态设置级别
【发布时间】: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

【问题讨论】:

    标签: java spring


    【解决方案1】:

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

    应用参数:

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

    【讨论】:

    • 但我的应用程序的 web-inf 文件夹中有 log4j.xml。如何知道我是在使用测试服务器还是产品服务器来部署应用程序以读取特定的 xml 文件?
    • 您可以将其删除并将其添加到 VM 选项中,正如我在评论中解释的那样。 @南
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多