logback动态设置某个类的日志级别

当调用别人接口出问题,排查却定位不了原因,又不想调低全局日志级别时,可采用定向修改某个class的logger日志级别的方案。如设置全局为ERROR级别,单独将某类日志设为INFO级别,该类就能输出INFO日志,其他类只输出ERROR日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设一下,现在有这么个情况:

你调别人的接口出问题了,但是怎么排查都定位不了原因。只能借助更详细的日志信息,这个时候,又不想把全局的日志级别调低,毕竟调低对并发量大的应用来说,瞬间会涌出很多很多日志信息。

最好的情况就是,只调整出问题的那个类的日志级别。那怎么办呢?

于是就有了下面的方案:

定向修改某个class的logger日志级别。

 public void testLog(String key, String level, String level2){
        LoggerContext loggerContext= (LoggerContext) LoggerFactory.getILoggerFactory();
        //设置全局日志级别
        ch.qos.logback.classic.Logger logger=loggerContext.getLogger("root");
        logger.setLevel(Level.toLevel(level));
 
        if (!StringUtils.isBlank(level2)) {
            //设置某个类日志级别-可以实现定向日志级别调整
            ch.qos.logback.classic.Logger vLogger = loggerContext.getLogger(key);
            if (vLogger!=null)
                vLogger.setLevel(Level.toLevel(level2));
        }
 
        List<ch.qos.logback.classic.Logger> loggerList = loggerContext.getLoggerList();
        for (ch.qos.logback.classic.Logger logger1 : loggerList){
            log.info(logger1.getName());
        }
    }


比如:  level = ERROR

     level2 = INFO

     key = "com.duy.soo.web.controller.TestController"

表示把全局日志级别设置为ERROR级别,单独把com.duy.soo.web.controller.TestController类的日志设置为INFO级别。

/**
 * @Author changle
 * @Time 17/6/30.
 * @Desc to do
 */
@Slf4j
@Controller
@RequestMapping(value = "/api/test")
public class TestController {
    @RequestMapping("/testDebug")
    @ResponseBody
    public Response<String> testLog(String key){
        //打印日志级别
        String rtn = "this is a INFO";
        log.info(rtn);
        rtn = "this is a ERROR";
        log.error(rtn);
        rtn = "this is a DEBUG";
        log.debug(rtn);
        Response<String> response = Response.ok(rtn);
        return response;
    }
}

如此一来,除了com.duy.soo.web.controller.TestController类以外的其他类,都只输出ERROR日志,而TestController类能输出INFO日志信息。
--------------------- 
作者:常乐_smile 
来源:优快云 
原文:https://blog.youkuaiyun.com/li396864285/article/details/73998009 

### Logback日志级别设置方法及含义 #### 一、Logback日志级别概述 Logback支持多种日志级别,这些级别按照严重程度从低到高排列。只有当某个日志事件的级别大于或等于配置的核心日志级别时,该事件才会被记录下来[^1]。 以下是常见的日志级别及其意义: - **TRACE**: 这是最详细的日志级别,用于跟踪程序执行过程中的每一步操作。它通常仅在开发阶段启用,因为会产生大量数据[^5]。 - **DEBUG**: 提供关于程序运行状态的信息,主要用于诊断问题并帮助开发者理解系统的内部工作流程。 - **INFO**: 记录重要的业务逻辑和系统行为信息,适合生产环境中的一般用途。 - **WARN**: 表示潜在错误的情况,可能不会立即影响应用功能但需要注意。 - **ERROR**: 指明发生了一个严重的错误或者异常状况,这可能会导致某些模块无法正常运作。 #### 二、Logback日志级别的配置方式 ##### 通过`application.properties`或`application.yml`文件配置 Spring Boot项目中可以直接利用内置属性来简化日志管理。例如,在`application.properties`中定义如下内容即可更改根日志器的日志级别为`INFO`: ```properties logging.level.root=INFO ``` 而在YAML格式下,则可写成: ```yaml logging: level: root: INFO ``` 这种方式简单快捷,适用于大多数场景下的基本需求[^4]。 ##### 使用XML形式(`logback-spring.xml`)进行高级定制化配置 对于更复杂的自定义需求而言,推荐采用专门设计给Logback使用的XML文档来进行详尽设定。下面展示了一段针对特定包名分别指定不同日志等级的例子: ```xml <configuration> <!-- 默认全局level --> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> <!-- 开发环境下特殊处理 --> <springProfile name="dev"> <logger name="cn.hg.demo.biz" level="DEBUG"/> <logger name="cn.hg.demo.component" level="DEBUG"/> </springProfile> </configuration> ``` 此片段展示了如何依据当前激活profile的不同而灵活切换各子组件的具体打印粒度[^3]。 #### 动态调整日志级别 除了静态初始化之外,Logback还提供了机制让用户能够在不停机的情况下实时修改正在运行的应用实例内的日志输出强度。这对于排查线上突发故障尤其有用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值