我想在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>
答案 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。