logback日志模块
四、日志框架
Springboot 选择的是SLF4j(日志抽象层)和logback(日志实现类)
(1)使用slf4j的日志绑定流程
-
添加slf4j-api的依赖
-
使用slf4j的API在项目中进行统一的日志记录
-
绑定具体的日志实现框架
-
slf4j有且仅有一个日志实现框架的绑定(如果出现多个默认使用第一个依赖日志实现)
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency>
(2)日志桥接器
桥接器和适配器不能同时部署,适配器指的是项目使用的log4j,由于这个框架开发的时间早于slf4j的日志门面,如果想要通过slf4j的接口实现,需要slf4j-reload4j.jar适配。桥接器指的是,项目本省不是通过slf4j实现,这时候想更换日志框架,那么就需要桥接器,例如log4j-over-slf4j.jar。如果两个同时部署,会造成死循环。
(3)配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--
配置集中管理属性,可以直接该属性的value值,格式:${name}
-->
<property name="consolePattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{10} %F %M %L %thread %m%n"/>
<!-- 日志输出格式
%-5level
%d{yyyy-MM-dd HH:mm:ss.SSS}
%c类的完整名称
%M为method
%L为行号
%thread线程名称
%m或者%msg为信息
%n换行
-->
<property name="filePattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{36} %F %M %L %thread %m%n"/>
<!--定义日志文件保存路径属性-->
<property name="log_dir" value="log/"/>
<!-- 控制台日志输出的appender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制流输出对象,默认System.out改为System.err-->
<target>System.err</target>
<!-- 日期消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${consolePattern}</pattern>
</encoder>
</appender>
<!-- 日志文件的输出-->
<!-- <appender name="file" class="ch.qos.logback.core.FileAppender">-->
<!-- <file>${log_dir}/logback.log</file>-->
<!-- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
<!-- <pattern>${pattern}</pattern>-->
<!-- </encoder>-->
<!-- </appender>-->
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_dir}/roll_logback.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${filePattern}</pattern>
</encoder>
<!-- 指定拆分规则-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按照时间和压缩格式声明拆分的文件名-->
<fileNamePattern>${log_dir}/rolling.%d{yyyy-MM}%i.log</fileNamePattern>
<!-- 按照文件大小拆分 -->
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<!-- 日志过滤规则-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--html 格式日志文件的输出-->
<appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
<file>${log_dir}/logback.html</file>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c{36}%F%M%L%thread%m</pattern>
</layout>
</encoder>
</appender>
<!-- 异步日志-->
<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="rollFile"/>
</appender>
<appender name="asyncHtml" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="htmlFile"/>
</appender>
<!-- root logger配置-->
<root level="ALL">
<appender-ref ref="console"/>
<appender-ref ref="async"/>
<appender-ref ref="asyncHtml"/>
</root>
<!-- 自定义 logger对象,additivity=false 是否继承rootlogger-->
<!-- <logger name="com.sgcc" level="info" additivity="false">-->
<!-- <appender-ref ref="console"/>-->
<!-- </logger>-->
</configuration>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本