Java项目集成logback

一.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>

这是日志存放的地方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值