Log4j2的使用(二)动态修改日志级别

动态修改Log4j2的日志级别

在实际生产环境中,我们一般配置的日志级别为INFO或者WARN级别及以上。当生产环境某项业务忽然出现问题,此时看WARN日志找不出什么线索,最好能在不重启服务器的情况下,将WARN级别改为DEBUG级别,查看更多的日志来判断情况。

这就需要能够动态调整Log4j2的日志级别

JMX方式

Log4j2官方提供了对JMX的支持,可以很方便的进行配置的修改

操作步骤

  1. 启动应用

  2. 启动JConsole,并点击MBean一栏

  3. 找到log4j2的MBean,通过getConfigText获取此时的配置
    在这里插入图片描述

  4. 此时访问应用,日志会打印出INFO级别的日志,说明此时应用默认级别为INFO

    INFO com.example.log4j2.controller.LogController - Info level log message
    WARN com.example.log4j2.controller.LogController - Warn level log message
    ERROR com.example.log4j2.controller.LogController - Error level log message
    
  5. 修改特定Logger的日志级别,我们这里将com.example.log4j2.controller.LogController 这个Logger的日志级别改为DEBUG级别

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %level %logger - %msg%n"/>
            </Console>
            <RollingFile name="MyFile" fileName="logs/app.log" immediateFlush="true"
                         filePattern="logs/$${date:yyyy-MM-dd}/app-%d{yyyy-MM-dd}-%i.log.gz">
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                <JsonTemplateLayout eventTemplateUri="classpath:EcsLayout.json"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size = "10KB"/>
                </Policies>
                <DefaultRolloverStrategy fileIndex="nomax"/>
            </RollingFile>
        </Appenders>
        <Loggers>
            <Root level="info">
                <AppenderRef ref="Console"/>
            </Root>
            <Logger name="com.example.log4j2.controller" level="debug" >
                <AppenderRef ref="MyFile"/>
            </Logger>
        </Loggers>
    </Configuration>
    
  6. 通过JConsole调用setConfigText方法
    在这里插入图片描述

  7. 再访问应用,发现已经把DEBUG级别的日志打印出来了

    DEBUG com.example.log4j2.controller.LogController - Debug level log message
    INFO com.example.log4j2.controller.LogController - Info level log message
    WARN com.example.log4j2.controller.LogController - Warn level log message
    ERROR com.example.log4j2.controller.LogController - Error level log message
    
  8. 也可以通过上述步骤的getConfigText方法再次验证返回的内容是不是刚刚修改过的内容

编程式+页面方式

我们可以使用编程式方式,通过页面调用HTTP接口,从而实现具体Logger的级别的调整,以下代码来自于官方文档

// org.apache.logging.log4j.core.config.Configurator;
Configurator.setLevel("com.example.Foo", Level.DEBUG);

// You can also set the root logger:
Configurator.setRootLevel(Level.DEBUG);

关于此方式stackoverflow更详细的介绍

两种方式的比较

如果只是调整logger的级别,并且对Devops友好,建议使用编程式;如果是想要动态修改其他配置,建议使用JMX。

其他资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值