Logback:开源日志组件

slf4j是一系列的日志接口,而log4j、logback是具体实现了的日志框架。

log4j:是apache实现的一个开源日志组件。

logback:同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架。是slf4j的原生实现,也就是说logback实现slf4j是不消耗内存和计算开销的。

Logback是SpringBoot内置的日志处理框架,spring-boot-starter其中包含了spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。

Logback相比log4j的优势,

比log4j更快,重写了内核,在一些关键路径上性能提升10倍,内存占用也更少。

经过大量的测试,和log4j测试不在一个量级。

logback-classic是SLF4J的实现,切换其他日志框架非常方便,

文档丰富并且不断更新,支持Groovy风格的配置文件

配置文件自动重新加载,如果更新了配置文件,logback-classic可以自动重新加载。

自动压缩归档的日志文件,压缩文件是异步进行,不影响应用。

配置文件可以处理不同的环境开发,测试,生产,这样一个配置文件就可以适应多个环境。

官方文档:Logback Manual

logback有5种日志级别,等级从低到高分别是TRACE < DEBUG < INFO < WARN < ERROR

Trace:是追踪,就是程序推进以下

Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.

Info:消息在粗粒度级别上突出强调应用程序的运行过程.

Warn:输出警告及warn以下级别的日志.

Error:输出错误信息日志.

OFF表示关闭全部日志

ALL表示开启全部日志。

@Slf4j

Log.debug() / log.info()/ log.warn() / log.error()

<?xml version="1.0" encoding="UTF-8"?>

<configuration

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"

        debug="false" scan="true" scanPeriod="30 second">

    <property name="PROJECT" value="iorder" />

    <property name="ROOT" value="logs/${PROJECT}/" />

    <property name="FILESIZE" value="50MB" />

    <property name="MAXHISTORY" value="100" />

    <timestamp key="DATETIME" datePattern="yyyy-MM-dd HH:mm:ss" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

        <encoder charset="utf-8">

            <pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n

            </pattern>

        </encoder>

    </appender>

    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <encoder charset="utf-8">

            <pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n

            </pattern>

        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <level>ERROR</level>

            <onMatch>ACCEPT</onMatch>

            <onMismatch>DENY</onMismatch>

        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <fileNamePattern>${ROOT}%d/error.%i.log</fileNamePattern>

            <maxHistory>${MAXHISTORY}</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy

                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <maxFileSize>${FILESIZE}</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>

    </appender>

    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <encoder charset="utf-8">

            <pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n

            </pattern>

        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <level>WARN</level>

            <onMatch>ACCEPT</onMatch>

            <onMismatch>DENY</onMismatch>

        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <fileNamePattern>${ROOT}%d/warn.%i.log</fileNamePattern>

            <maxHistory>${MAXHISTORY}</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <maxFileSize>${FILESIZE}</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>

    </appender>

    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <encoder charset="utf-8">

            <pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n

            </pattern>

        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <level>INFO</level>

            <onMatch>ACCEPT</onMatch>

            <onMismatch>DENY</onMismatch>

        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <fileNamePattern>${ROOT}%d/info.%i.log</fileNamePattern>

            <maxHistory>${MAXHISTORY}</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <maxFileSize>${FILESIZE}</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>

    </appender>

    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <encoder charset="utf-8">

            <pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n

            </pattern>

        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <level>DEBUG</level>

            <onMatch>ACCEPT</onMatch>

            <onMismatch>DENY</onMismatch>

        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <fileNamePattern>${ROOT}%d/debug.%i.log</fileNamePattern>

            <maxHistory>${MAXHISTORY}</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy

                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <maxFileSize>${FILESIZE}</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>

    </appender>

    <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <encoder charset="utf-8">

            <pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n

            </pattern>

        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">

            <level>TRACE</level>

            <onMatch>ACCEPT</onMatch>

            <onMismatch>DENY</onMismatch>

        </filter>

        <rollingPolicy

                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <fileNamePattern>${ROOT}%d/trace.%i.log</fileNamePattern>

            <maxHistory>${MAXHISTORY}</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy

                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

                <maxFileSize>${FILESIZE}</maxFileSize>

            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>

    </appender>

    <logger name="org.apache.ibatis" level="INFO" additivity="false" />

    <logger name="org.mybatis.spring" level="INFO" additivity="false" />

    <logger name="com.github.miemiedev.mybatis.paginator" level="INFO" additivity="false" />

    <root level="DEBUG">

        <appender-ref ref="STDOUT" />

        <appender-ref ref="DEBUG" />

        <appender-ref ref="ERROR" />

        <appender-ref ref="WARN" />

        <appender-ref ref="INFO" />

        <appender-ref ref="TRACE" />

    </root>

</configuration>

### 如何使用和配置Logback日志框架 #### 配置方法概述 Logback既可以通过`application`配置文件进行日志的配置,也可以通过`logback-spring.xml`进行配置。对于大多数应用场景而言,采用全局配置文件如`application.yml`或`.properties`已经能够满足需求;然而当面临更为复杂的个性化日志输出要求时,则建议利用`logback-spring.xml`来进行更细致化的设置[^1]。 #### 日志框架简介 Logback是一种专为Java平台设计的日志记录工具,其特性在于高度灵活的日志管理能力——不仅限于简单的消息打印,还包括但不限于等级调控、事件筛选机制等高级功能的支持。该框架依托于SLF4J这一简洁的日志外观层运作,在保持与其他主流Java日志系统的良好互操作性的前提下实现了自身的独特价值。核心组成部分包括Logger(负责接收并处理日志请求)、Appender(决定日志最终去向)以及Layout(规定日志呈现样式),三者协作确保了日志信息的有效传递与合理展示[^2]。 #### Spring Boot中的具体实践 在Spring Boot环境中部署Logback主要涉及以下几个方面的工作: - **定义控制台及文件输出器(Appenders)**:创建专门用于屏幕显示(`STDOUT`)和磁盘存储(`FILE`)的日志条目处理器; - **设定全局日志级别**:一般推荐初始设为INFO级以便平衡调试便利性和生产环境效率考量; - **针对特定包指定不同策略**:比如允许来自`com.example.myapp`命名空间内的组件享有更加详尽(即DEBUG及以上)的日志跟踪权限[^4]。 ```xml <configuration> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 文件输出 --> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>logs/app.log</file> <append>true</append> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> </appender> <!-- 设置根日志级别,并关联上述两个输出器 --> <root level="info"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE"/> </root> <!-- 对某些特殊包启用更详细的日志 --> <logger name="com.example.myapp" level="debug"/> </configuration> ``` 此段XML片段展示了如何在一个典型的`logback-spring.xml`中完成以上提到的各项任务。值得注意的是,实际项目里可根据具体情况调整路径名、模式字符串等内容来贴合业务逻辑特点和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大连赵哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值