SpringBoot Logback修改日志级别

  1. 在application.yml 通过配置配置,按住Ctrl + 左键可以看源码
javascript 复制代码
logging:
  level:
    root: info
    com.dj.test.controller: debug
    com.dj.test.service: debug
  1. 自己写接口直接动态修改日志级别,读取application.yml配置文件算是间接修改
java 复制代码
package com.dj.springtest.controller;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

/**
 * Date: 2024/1/13
 * Time: 22:02
 * Description: No Description
 */
@RestController
public class LogController {

    private static final List<String> LEVELS = Arrays.asList("ALL", "all", "TRACE", "trace", "DEBUG", "debug", "INFO", "info", "WARN", "warn", "ERROR", "error", "OFF", "off");

    /**
     * 设置日志界级别
     *
     * @param overall     全局设置
     * @param part        部分设置
     * @param packagePath 涵盖包,如果有多个path,请使用英文逗号分隔
     */
    @GetMapping("/log/level")
    public String setLogLevel(String overall, String part, String packagePath) {
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        if (StringUtils.isNotBlank(overall) && LEVELS.contains(overall)) {
            Logger rootLogger = loggerContext.getLogger("root");
            rootLogger.setLevel(Level.toLevel(overall));
        }

        //根据包路径进行设置
        if (StringUtils.isNotBlank(part) && LEVELS.contains(part) && StringUtils.isNotBlank(packagePath)) {
            String[] paths = packagePath.split(",");
            for (String path : paths) {
                Logger pathLogger = loggerContext.getLogger(path);
                pathLogger.setLevel(Level.toLevel(part));
            }
        }

        return "Succeeded in changing the log level";
    }

}
相关推荐
云烟成雨TD12 分钟前
Spring AI 1.x 系列【28】基于内存和 MySQL 的多轮对话实现案例
java·人工智能·spring
Lyyaoo.14 分钟前
【JAVA基础面经】String、StringBuffer、StringBuilder
java·开发语言
TeamDev20 分钟前
JxBrowser 8.18.2 版本发布啦!
java·前端·跨平台·桌面应用·web ui·jxbrowser·浏览器控件
晴天sir24 分钟前
Redis 在业务中的几种典型用法
java·数据库·redis
WJX_KOI29 分钟前
MemOS —— 为大语言模型 (LLMs) 和智能体打造的记忆操作系统。
java·人工智能·语言模型
_日拱一卒34 分钟前
LeetCode:矩阵置零
java·数据结构·线性代数·算法·leetcode·职场和发展·矩阵
weixin_4080996737 分钟前
【实战教程】懒人精灵如何实现 OCR 文字识别?接口调用完整指南(附可运行示例)
java·前端·人工智能·后端·ocr·api·懒人精灵
花千树-0101 小时前
Java Agent 集成 MCP 工具协议:让 AI 真正驱动企业系统
java·ai·langchain·ai agent·mcp·harness·j-langchain
橘子编程1 小时前
GoF 23 种设计模式完整知识总结与使用教程
java·c语言·开发语言·python·设计模式
君以思为故1 小时前
认识Linux -- 线程同步与互斥
java·开发语言