日志框架体系梳理( 续 )
2022-05-24 17:14
1101 查看
0、前言
- 基础篇链接( 含JUL、JCL、LOG4J、LOGBACK、SLF4J、LOG4J2 ):https://www.cnblogs.com/xiegongzi/p/16293103.html
7、SpringBoot相关
- SpringBoot 默认使用SLF4J作为日志门面,Logback作为日志实现来记录日志
- 项目初始依赖,只需要一个web启动器就可以了,我的SpringBoot版本
2.3.12.RELEASE
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
- 在这里面有这log日志相关的依赖
7.1、快速上手
测试
@Test void quickStartSpringBootLog() { // 是org.slf4j包下的 Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class); logger.error("error信息"); logger.warn("warn信息"); logger.info("info信息"); logger.debug("debug信息"); logger.trace("trace信息"); }
结果
ERROR 8208 ---[ main] c.z.SpringbootLogApplicationTests : error信息 WARN 8208 --- [ main] c.z.SpringbootLogApplicationTests : warn信息 INFO 8208 --- [ main] c.z.SpringbootLogApplicationTests : info信息
- 从这个输出内容得到的结果: 这种输出格式,就是典型的logback输出格式,即:SpringBoot的默认日志实现是logback
- 日志默认级别是info级别
7.2、桥接器
- 看一下SpringBoot中的日志桥接器是什么
@Test void bridgeTest() { // 是org.apache.logging.log4j包下的 Logger logger = LogManager.getLogger(SpringbootLogApplicationTests.class); logger.info("info信息"); }
- 结果
INFO 20948 --- [ main] c.z.SpringbootLogApplicationTests : info信息
- 从这个效果就可以看出来: 1、SpringBoot中桥接器是好使的
- 2、使用的桥接器就是基础篇中的slf4j+logback的形式
7.3、使用application.yml进行日志配置
7.3.1、认识yml配置日志的方式
spring: application: name: SpringBootLog-server # 日志配置 logging: # 日志级别 此示例为com.zixieqing包下的日志级别 level: com: zixieqing: debug # 格式设置 pattern: # 控制台输出格式设置 console: "%d{yyyy-MM-dd} [%level] -%m%n"
测试
@Test void ymlConfigLogTest() { // 是org.slf4j包下的 Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class); logger.error("error信息"); logger.warn("warn信息"); logger.info("info信息"); logger.debug("debug信息"); logger.trace("trace信息"); }
结果
2022-05-24 [ERROR] -error信息 2022-05-24 [WARN] -warn信息 2022-05-24 [INFO] -info信息 2022-05-24 [DEBUG] -debug信息
7.3.2、yml配置日志输出到文件中
spring: application: name: SpringBootLog-server # 日志配置 logging: # 日志级别 此示例为com.zixieqing包下的日志级别 level: com: zixieqing: debug # 格式设置 pattern: # 控制台输出格式设置 console: "%d{yyyy-MM-dd} [%level] -%m%n"# 将日志输出到文件中 file: path: "d:/test/SpringBootLog"
- 注意:yml配置文件中的
path: "d:/test/SpringBootLog"
只是路径,而默认的文件名叫做spring.log
测试
@Test void fileLog() { // 是org.slf4j包下的 org.slf4j.Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class); logger.error("error信息"); logger.warn("warn信息"); logger.info("info信息"); logger.debug("debug信息"); logger.trace("trace信息"); }
7.4、使用logback实现日志拆分
- 如果是需要配置日志拆分等相对高级的功能,那么
application.yml
就达不到需求了,所以:需要使用日志实现相应的配置文件 - 这里的示例就是
logback
日志实现,和基础篇中一样,需要在类路径resources
下,配置logback.xml
logback.xml测试配置
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/> <property name="logPath" value="d:/test" /> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> </appender> <!-- 配置文件的appender 可拆分归档的文件 --> <appender name="rollingLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 输入格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> <!-- 引入文件位置 --> <file>${logPath}/roll_logback.log</file> <!-- 指定拆分规则 --> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 按照时间和压缩格式声明文件名 压缩格式gz --> <fileNamePattern>${logPath}/roll.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern> <!-- 按照文件大小来进行拆分 --> <maxFileSize>1KB</maxFileSize> </rollingPolicy> </appender> <logger name="com.zixieqing" level="debug" additivity="false"> <appender-ref ref="rollingLog"/> </logger> </configuration>
- 想要配置其他的,基础篇中怎么配置,搬过来即可
测试
@Test void rollingLOg() { // 是org.slf4j包下的 org.slf4j.Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class); for (int i = 0; i < 1000; i++) { logger.error("error信息"); logger.warn("warn信息"); logger.info("info信息"); logger.debug("debug信息"); logger.trace("trace信息"); } }
7.5、使用slf4j + log4j2 - 重点
- 这两个搭配才干活不累
步骤
1、因为SpringBoot默认是采用的slf4j + logback的形式,因此:去除web启动中的logging,从而就去除logback日志实现了( 为什么剔除logging就可以了,看maven的依赖树,logback的上一级就是logging
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- 排除掉原始依赖 以此去除logback引用 --> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency>
2、导入SpringBoot和log42j的整合启动器
<!-- 添加log4j2依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
- 3、在
resources
目录下新建log4j2.xml
配置文件,并编写想要的内容即可
<?xml version="1.0" encoding="UTF-8"?> <!--status 框架本身的日志级别 monitorInterval指定热更新间隔 最小值5秒 idea不生效--> <Configuration status="warn" monitorInterval="5"> <!--此文件中的全局属性配置--> <properties> <property name="LOG_PATH" value="d:/test/SpringBootLog"/> </properties> <Appenders> <Console name="consoleAppender" target="SYSTEM_OUT"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n"/> </Console> </Appenders> <Appenders> <!--拆分日志--> <RollingFile name="rollingFile" fileName="${LOG_PATH}/app.log" filePattern="${LOG_PATH}/$${date:yyyy-MM}/app.%d{dd-HH-mm} %i.log"> <!--拦截器 如果等级为debug的放行 否则就禁止 可以单独禁止某一项--> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> <!--自定义日志输出格式--> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n"/> <!--拆分策略--> <Policies> <!--系统启动时 触发拆分规则 产生一个新的日志文件--> <OnStartupTriggeringPolicy/> <!--按照时间节点拆分 就是filePattern定义的--> <TimeBasedTriggeringPolicy/> <!--单文件最大100m--> <SizeBasedTriggeringPolicy size="1MB"/> </Policies> <!--统一目录下 最多生成10个文件--> <DefaultRolloverStrategy max="10"/> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="consoleAppender"/> <AppenderRef ref="rollingFile"/> </Root> </Loggers> </Configuration>
- 想要其他的配置,就把基础篇中对应的内容搬过来即可
- 注意点:这个
log4j2.xml
文件中配置了如下内容的话:
<properties> <property name="LOG_PATH" value="d:/test/SpringBootLog"/> </properties>
- 那么别傻不拉几的在yml中又配置如下内容( 或者要都配置的话,那么保证两个路径一样,不然报N多
ERROR / cause by: not found xxxxxxx
具体报的是什么忘了,总之貌似是Failed to load log4j2 configurationerror detected
,具体英文是什么忘了,大概意思就是检测到log4j2.xml
加载失败
# 日志配置 logging: file: path: "d:/test/SpringBootLog"
测试
@Test void slf4jAndLog4j2Test() { // 是org.slf4j包下的 org.slf4j.Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class); logger.error("error信息"); logger.warn("warn信息"); logger.info("info信息"); logger.debug("debug信息"); logger.trace("trace信息"); }
结果
相关文章推荐
- 日志框架梳理
- Java日志框架梳理-SLF4J+logback
- Web框架梳理:第三章:Mybatis入门、Mybatis代理开发、log4j:日志管理工具
- Java日志框架梳理-Java日志框架总览
- Java日志框架梳理-SLF4J+log4j
- 电商之梳理mina相关知识---框架
- 关于Java日志框架的问题
- 从0搭建pythonseleniumweb框架之第一步编写配置文件,浏览器引擎类,日志类
- 动手造轮子:写一个日志框架
- ssm框架下slf4j+log4j整合输出日志
- 开源应用框架BitAdminCore:更新日志20180605
- 分布式日志收集框架flume
- ABP框架的体系结构及模块系统讲解
- 【Hibernate框架开发之三】搭建Hibernate日志(slf4j转log4j)环境并搭建Junit单元测试环境!
- C/C++/C# 基础知识体系框架图
- 解读ASP.NET 5 & MVC6系列(9):日志框架
- IDEA整合日志框架Log4j2+Slf4j详细配置过程,被折腾了很久
- 政府大数据治理体系的框架及其实现的有效路径
- 十五、Java基础---------集合框架体系以及List
- 日志输出框架Log4j使用