如何在spring-mvc应用程序中设置动态日志级别?

时间:2018-06-07 16:40:50

标签: java spring spring-mvc

我想在spring-mvc项目中设置日志级动态。 我想动态设置它,以便在不重启服务器的情况下我可以更改日志级别。 我们可以使用apllication.propertes或从数据库获取日志级别。 我的服务器包含太多的应用程序日志。 我想停止它,每当我想显示日志我只是从数据库或任何其他方式更改日志级别。 但我希望在不重新启动服务器的情况下实现此过程。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="DEV_HOME" value="${catalina.base}/logs" />


    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">

            <Pattern>
                %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n
            </Pattern>

        </layout>
    </appender>
    <root level="error"> 
        <appender-ref ref="STDOUT" />
    </root>


  <appender name="FILE2" class="ch.qos.logback.core.FileAppender">

                 <file>${DEV_HOME}/SMPPIN.log</file>
               <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- daily rollover -->
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>

      <!-- keep 30 days' worth of history -->
      <maxHistory>30</maxHistory>

       <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>1MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>


                  </rollingPolicy>
        <!-- <param name="File" value="SMPPIN.log"/> orther options ${user.home}
                 <param name="MaxFileSize" value="15000KB"/>
                 <param name="MaxBackupIndex" value="30"/>
                        <param name="append" value="true" /> -->

    <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>


     <logger name="SMPPINFO" level="info" additivity="false">

          <appender-ref ref="FILE2"/>         
        </logger>

</configuration>

1 个答案:

答案 0 :(得分:1)

如果使用弹簧启动,弹簧执行器可以使用此功能。

只需插入执行器(通过构建系统),您就可以获得应用程序可访问的端点,其中一个端点允许动态更改日志级别而无需重新启动。

当然,当重启完成后,配置会改回来。

例如,可以找到相关示例here

底线,只需调用以下端点,然后设置

即可
curl -i -X POST -H 'Content-Type: application/json' -d '{"configuredLevel": "DEBUG"}' http://localhost:8080/loggers/ROOT

如果您不使用春季启动,默认情况下此功能无法使用,因此您必须自行完成。

有许多不同的方法,其中一些是:

  • 由于您正在使用logback,因此您可以利用其JMX配置程序: 查看示例Here 这个想法很简单:你配置logback以暴露一些JMX mbeans并通过jconsole / jvisualvm或你选择的任何其他可以使用JMX的客户端连接到你的应用程序

  • 您可以使用对记录器的编程访问,并创建一些只使用以下内容的端点(HTTP):

    记录器记录器= ...;

    logger.setLevel(Level.DEBUG);

  • 与JMX方法结合使用。如果您无法轻松访问JMX,可以使用“jolokia”项目通过JMX打开http API。