一.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>
这是日志存放的地方