一.Logback简介
Logback 是一个用于 Java 应用程序的日志框架,由 Ceki Gülcü(log4j 的创始人)开发,旨在提供更快、更可靠且功能更丰富的日志解决方案。它是 SLF4J(Simple Logging Facade for Java)的原生实现之一,广泛用于现代 Java 项目中。
二.Logback 的核心组件
1.Logger:
1.1日志记录器,负责接收日志事件。
1.2支持层级结构(如 com.example.foo 继承自 com.example)。
1.3可设置不同的日志级别(TRACE, DEBUG, INFO, WARN, ERROR)。
2.Appender:
2.1决定日志输出的目的地,如控制台、文件、数据库等。
2.2支持多种 Appender 实现,例如 ConsoleAppender, FileAppender, RollingFileAppender 等。
3.Layout / Encoder:
3.1定义日志输出格式。
3.2在 Logback 中通常使用 PatternLayoutEncoder 来配置日志格式字符串。
三.Logback 的优势
1.高性能:相比其他日志框架(如 log4j 1.x),Logback 更快,资源消耗更低。
2.自动重载配置:支持运行时重新加载配置文件,无需重启应用。
3.灵活的日志滚动策略:如按时间或大小滚动日志文件。
4.强大的过滤机制:可通过 LevelFilter、ThresholdFilter 等对日志进行过滤。
5.与 SLF4J 原生集成:作为 SLF4J 的官方实现,兼容性更好。
四.配置方式
Logback 支持通过 XML 文件(如 logback.xml 或 logback-spring.xml)进行配置,也可以编程式配置,这里使用xml配置
五.使用场景
1.Web 应用系统日志记录
2.微服务架构中的分布式日志收集
3.运维监控和审计日志
4.开发调试阶段的日志追踪
六.标签含义
接下来讲一讲logback.xml中的各种标签含义
1.configuration,这是根标签,其他的配置都包含在这里面
<configuration>
...
</configuration>
2.property ,属性定义方便后面调用
<property name="log.path" value="D:\home\oa_system\logs" />
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
log.path:日志文件的存储路径。
log.pattern:日志输出格式模板,含义如下

3.Appender 用来定义日志的输出目的地。
3.1. 控制台输出(console)
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
功能:输出日志到控制台。
使用 ${log.pattern} 指定的日志格式。
3.2. 文件输出 - info 级别日志(file_info)
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
功能: 只记录 INFO 级别的日志,并写入文件。
file:当前正在写入的日志文件。
rollingPolicy:滚动策略,这里是按天滚动。
fileNamePattern:每天生成一个新文件,如 sys-info.2024-07-15.log。
maxHistory:保留最近 60 天的日志文件。
LevelFilter:只接受 INFO 级别的日志。
3. 3文件输出 - error 级别日志(file_error)
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
...
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
...
</filter>
</appender>
功能:与 file_info 类似,但只记录 ERROR 级别的日志。
3.4Logger 定义
用于设置特定包或类的日志级别。
<logger name="com.jc.oa_system" level="info" />
<logger name="org.springframework" level="warn" />
name:包名或类名。
level:指定该包下的日志输出级别。
com.jc.oa_system 包下输出 INFO 及以上级别日志。
org.springframework 包下输出 WARN 及以上级别日志。
3.5Root Logger(全局日志入口)
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
level="info":全局日志级别为 INFO。
appender-ref:指定日志输出到哪些 appender。
console:输出到控制台。
file_info:输出到 info 日志文件。
file_error:输出到 error 日志文件。
这是我的logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志存放路径 -->
<property name="log.path" value="D:\home\oa_system\logs" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.jc.oa_system" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />
<!--系统操作日志-->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>
这是日志存放的地方

1282

被折叠的 条评论
为什么被折叠?



