【问题标题】:how to set dynamic log level in spring-mvc application?如何在 spring-mvc 应用程序中设置动态日志级别?
【发布时间】:2018-11-17 16:04:41
【问题描述】:

我想在我的 spring-mvc 项目中设置日志级别动态。 我想动态设置它,以便在不重新启动服务器的情况下我可以更改日志级别。 我们可以使用 appllication.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>

【问题讨论】:

标签: java spring spring-mvc


【解决方案1】:

如果您使用 Spring boot,则此功能可通过 spring-actuator 使用。

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

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

相关的例子可以在here例如找到。

底线,只需调用以下端点,就可以了

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

如果你不使用spring boot,这个功能默认是不可用的,只能自己动手了。

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

  • 由于您使用的是 logback,您可以利用它的 JMX 配置器: 查看示例Here 这个想法很简单:您配置 logback 以公开一些 JMX mbean,并通过 jconsole/jvisualvm 或您选择的任何其他可以使用 JMX 的客户端连接到您的应用程序

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

    记录器 logger = ... ;

    logger.setLevel(Level.DEBUG);

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

【讨论】:

  • 我没有使用 spring-boot。我正在使用 spring-mvc 应用程序。
  • 那么您可以使用我在文章第二部分中描述的任何方法。
  • 你的帖子链接好吗?
  • 对不起,我不明白,我已经描述了所有的方法(见项目符号)。你的意思是什么链接?
  • 正如@MarkBramnik 所说,我同意,使用 Logback 配置或直接在代码中修改 X.setLevel(x);
猜你喜欢
  • 2017-03-26
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
相关资源
最近更新 更多