| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> springboot logback-spring.xml 整合apollo实现动态配置日志级别 -> 正文阅读 |
|
[Java知识库]springboot logback-spring.xml 整合apollo实现动态配置日志级别 |
平时项目记录日志记录打印SQL,打印MQ日志,日志量比较大,一般用INFO,但是项目刚上线,不太稳定一般需要用DEBUG记录详细日志,或者由于项目出现问题,需要调整到DEBUG,查看详情,所以需要支持动态调整日志级别.? 1.配置logback-spring.xml 2.配置application.yml 3.配置apollo参数 4编写apollo变化触发类 5.编写日志测试类 6.测试 1.配置logback-spring.xml ? 配置日志级别log.level ,参数log.level.com.sun.springboot来源于apollo参数 ? <springProperty scope="context" name="log.level" source="log.level.com.sun.springboot"/> ?配置logger,日志级别来自上面定义的参数log.level ?<logger name="com.sun.springboot.controller" level="${log.level}"/> 2.配置application.yml 3.配置apollo参数 ? ?log.level.com.sun.springboot? info 4编写apollo变化触发类 package com.sun.springboot.controller; import ch.qos.logback.classic.Level; /** ? ? private ApplicationContext applicationContext; ? ? @ApolloConfigChangeListener(value = {"application"}) ? ? ? ? Map<String, String> logMap = new HashMap<>(); ? ? ? ? ? ? if (changeKey.startsWith(prefix)) { ? ? ? ? ? ? oldValue, newValue); ? ? ? ? changeLogLevel(logMap); ? ? private void changeLogLevel(Map<String, String> logMap) { ? ? @Override 5.编写日志测试类 package com.sun.springboot.controller; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.LoggerContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Objects; @RestController @RequestMapping(value = "log") public class LogController { private static Logger logger = LoggerFactory.getLogger(LogController.class); /** * 获得日志所在包的日志级别 * * @param pack 所在包的日志级别 * @return */ @RequestMapping(value = "getLevel") public String getLevel(String pack) { Logger logger = LoggerFactory.getLogger(LogController.class); // 第一步:获取日志上下文 LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); // 第二步:获取日志对象 (日志是有继承关系的,关闭上层,下层如果没有特殊说明也会关闭) ch.qos.logback.classic.Logger log = lc.getLogger(pack); Level level = log.getLevel(); String result = ""; if (Objects.isNull(level)) { result = String.format("package:%s,level:%s", pack, "null"); } else { result = String.format("package:%s,level:%s", pack, level.toString()); } // 第三步:修改日志级别 logger.debug("===== 我是 debug ====="); logger.info("===== 我是 info ====="); logger.error("===== 我是 ERROR ====="); return result; } } 6.测试 ? 6.1先修改?log.level.com.sun.springboot 为debug ? 6.2? 访问接口:http://localhost:6012/log/getLevel?pack=com.sun.springboot.controller ? 返回:package:com.sun.springboot.controller,level:DEBUG logback-spring.xml? <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="true" scanPeriod="20 seconds"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <springProperty scope="context" name="log.level" source="log.level.com.sun.springboot"/> <property name="LOG_HOME" value="F:/logs-spring"/> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/debug/debug.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>16</MaxHistory> <!--日志文件切割大小--> <maxFileSize>20MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> </appender> <!-- 按照每天生成日志文件 --> <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/info/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>16</MaxHistory> <!--日志文件切割大小--> <maxFileSize>20MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> </appender> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/warn/warn.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>24</MaxHistory> <!--日志文件切割大小--> <maxFileSize>20MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/error/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>32</MaxHistory> <!--日志文件切割大小--> <maxFileSize>20MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> <logger name="com.sun.springboot.controller" level="${log.level}"/> <!-- 日志输出级别 --> <root level="INFO"> <!-- 控制台输出 --> <appender-ref ref="STDOUT"/> <!--<!– 文件输出 –>--> <appender-ref ref="ERROR"/> <appender-ref ref="INFO"/> <appender-ref ref="DEBUG"/> <appender-ref ref="WARN"/> </root> </configuration> 参考:springboot apollo 自动刷新_重度孤独症患者的博客-CSDN博客 logback java动态配置【动态修改日志级别,动态修改appender】_keep-go-on的博客-CSDN博客_java 动态修改日志级别 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:14:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |