Logback -- 使用

目录

简介

依赖

简单使用

配置文件

Logback配置文件模板

 日志文件按照日期和大小归档

 日志等级粒度打印控制

异步日志


简介

  • Logback是由log4j创始人设计的又一个开源日志组件
  • Logback当前分成三个模块:logback-corelogback- classiclogback-access
  • logback-core是其它两个模块的基础模块,类似与springframework
  • logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API。使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能

依赖

        <!--slf4j 核心依赖-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
         
       <!-- logback依赖  logback-classic依赖引入logback-core,则不需要单独引入-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

简单使用

  • 日志级别:trace < debug < info < warn < error
  • 默认的日志级别是debug
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogTest {
    @Test
    public void test(){
        Logger logger = LoggerFactory.getLogger(LogTest.class);
        logger.error("error 信息");
        logger.warn("warn 信息");
        logger.info("info 信息");
        logger.debug("debug 信息");
        logger.trace("trace 信息");
    }
}

注意导包是slf4j下的

在没有配置文件的情况下输出如下:

17:22:39.160 [main] ERROR LogTest - error 信息
17:22:39.164 [main] WARN LogTest - warn 信息
17:22:39.164 [main] INFO LogTest - info 信息
17:22:39.164 [main] DEBUG LogTest - debug 信息


Process finished with exit code 0

配置文件

  • 在resources下面,创建一份配置文件,命名为logback.xml

Logback配置文件模板

logback.xml

输出格式:

  • %-5level 级别:案例为设置5个字符,左对齐
  • %d{yyyy-MM-dd HH:mm:ss.SSS}:日期
  • %c: 当前类全限定名
  • %M: 当前执行日志的方法
  • %L: 行号
  • %thread: 线程名称
  • %m或者%msg: 信息
  • %n: 换行
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--通用格式配置-->
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/>
    <!-- 配置文件的输出路径 -->
    <property name="LOG_HOME" value="E://Temp//log" />
    <property name="APP_NAME" value="logback-demo"/>
    <property name="VERSION" value="snapshoot"/>

    <!-- 配置文件的appender 普通文件-->
    <appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
        <!-- 引入文件位置 -->
        <file>${LOG_HOME}/${APP_NAME}/${VERSION}/logback.log</file>
        <!-- 配置日志输出格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式引用通用属性配置 -->
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!-- 配置控制台appender -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <!--默认:System.out 表示以黑色字体输出日志-->
        <!--设置:System.err 表示以红色字体输出日志-->
        <!--<target>System.err</target>-->
        <!--配置日志输出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式引用通用属性配置 -->
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!--打印sql-->
    <!--<logger name="cn.lb.dao" level="DEBUG"/>-->

    <!-- additivity=“false” 表示不继承root logger
    <logger name="com.xc" level="info" additivity="false"
        <appender-ref ref="consoleAppender"/>
    </logger> -->
    <!--
        日志记录器
        配置root logger
        level:配置日志级别
        可以同时配置多个appender,做日志的多方向输出
    -->
    <root level="ALL">
        <!-- 引入控制台appender -->
        <appender-ref ref="consoleAppender"/>
        <!-- 引入普通文件appender -->
        <appender-ref ref="fileAppender"/>

        <!--<appender-ref ref="cn.lb.dao"/>-->
    </root>
</configuration>

配置好配置文件后,再次执行之前的测试方法,控制输出如下

[ERROR] 2022-09-22 17:47:09.055 LogTest test 9 main error 信息
[WARN ] 2022-09-22 17:47:09.067 LogTest test 10 main warn 信息
[INFO ] 2022-09-22 17:47:09.069 LogTest test 11 main info 信息
[DEBUG] 2022-09-22 17:47:09.070 LogTest test 12 main debug 信息
[TRACE] 2022-09-22 17:47:09.070 LogTest test 13 main trace 信息


Process finished with exit code 0

log文件的内容如下

 日志文件按照日期和大小归档

    <!-- 配置文件的appender 可拆分归档的文件 -->
    <appender name="roll" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 输入格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!--文件输出位置 -->
        <file>${LOG_HOME}/${APP_NAME}/${VERSION}/roll_logback.log</file>
        <!-- 指定拆分规则 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 按照时间和压缩格式声明文件名 压缩格式gz -->
            <fileNamePattern>${LOG_HOME}/${APP_NAME}/${VERSION}/roll.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
            <!-- 按照文件大小来进行拆分 -->
            <maxFileSize>100KB</maxFileSize>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

当前日志为roll_bogback.log,当日志文件超过100k或者切换日期则会压缩成日期格式gz

 日志等级粒度打印控制

    <!-- 配置控制台的appender 使用过滤器 -->
    <appender name="consoleFilterAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!-- 配置过滤器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 设置日志的输出级别 -->
            <level>ERROR</level>
            <!-- 高于level中设置的级别,则打印日志 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 低于level中设置的级别,则屏蔽日志 -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

异步日志

  • 原理:系统会为日志操作单独的分配出来一根线程,原来用来执行当前方法的主线程会继续向下执行
  • 线程1:系统业务代码执行,线程2:打印日志,两根线程争夺CPU的使用权
     <!--配置异步日志-->
    <appender name="asyncAppender" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="consoleAppender"/>
    </appender>
@Test
public void test05(){
    Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
    //日志打印操作
    for (int i = 0; i < 100; i++) {
        logger.error("error信息");
        logger.warn("warn信息");
        logger.info("info信息");
        logger.debug("debug信息");
        logger.trace("trace信息");
    }
    //系统本身业务相关的其他操作
    System.out.println("1----------------------");
    System.out.println("2----------------------");
    System.out.println("3----------------------");
    System.out.println("4----------------------");
    System.out.println("5----------------------");
}

输出结果:日志和业务代码交替执行

[WARN ] 2022-09-22 17:56:29.950 LogTest ? ? main warn信息
[INFO ] 2022-09-22 17:56:29.950 LogTest ? ? main info信息
[DEBUG] 2022-09-22 17:56:29.950 LogTest ? ? main debug信息
1----------------------
[TRACE] 2022-09-22 17:56:29.950 LogTest ? ? main trace信息
2----------------------
3----------------------
4----------------------
5----------------------
[ERROR] 2022-09-22 17:56:29.950 LogTest ? ? main error信息
[WARN ] 2022-09-22 17:56:29.950 LogTest ? ? main warn信息
[INFO ] 2022-09-22 17:56:29.950 LogTest ? ? main info信息
[DEBUG] 2022-09-22 17:56:29.950 LogTest ? ? main debug信息
[TRACE] 2022-09-22 17:56:29.950 LogTest ? ? main trace信息

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值