logback的简单使用(代码片段)

暴躁的程序猿啊 暴躁的程序猿啊     2022-12-11     623

关键词:

logback的使用

logback是由log4j的创始人设计的另一个开源日志组件,性能比log4j好

LogBack主要分为三个模块:

logback-core:其他两个模块的基础模块

logback-class:它是log4j的改良版本,完整实现了Slf4j API

logback-access:访问模块与servlet容器继承提供通过Http来访问日志的功能

后续代码都是通过Slf4j日志门面搭建日志系统,代码没有区别,主要是通过修改配置文件和pom.xml依赖

Logback入门

 <dependencies>
        <!--日志门面-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.31</version>
        </dependency>
        <!--logback日志实现-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.8</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
<!--            <scope>test</scope>-->
        </dependency>
    </dependencies>
public class LogBackTest 

    /**
     * 日志记录器对象
     */
    private static final Logger LOGGER= LoggerFactory.getLogger(LogBackTest.class);

    @Test
    public void testQuick() throws Exception
        /*默认级别为info*/
        LOGGER.info("info");
        LOGGER.error("error");
        LOGGER.warn("warn");
        LOGGER.debug("debug");
        LOGGER.trace("trace");
        //使用占位符输出日志信息
        String name="fei";
        Integer age=20;
        LOGGER.info("用户信息为--->姓名:,年龄:",name,age);
    

输出

10:35:06.294 [main] INFO com.xxx.test.LogBackTest - info
10:35:06.297 [main] ERROR com.xxx.test.LogBackTest - error
10:35:06.297 [main] WARN com.xxx.test.LogBackTest - warn
10:35:06.297 [main] DEBUG com.xxx.test.LogBackTest - debug
10:35:06.297 [main] INFO com.xxx.test.LogBackTest - 用户信息为--->姓名:fei,年龄:20

logBack配置文件

logback会依次读取以下配置文件

logback.groovy

logback-test.xml

logback.xml

如果都不存在会采用默认配置
完整日志示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
    日志输出格式:
    %-5level
    %dyyyy-MM-dd HH:mm:ss.SSS日期
    %c类的完整名称
    %M为method
    %L为行号
    %thread线程名称
    %m或者%msg为信息
    %n换行
-->
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度
%msg:日志消息,%n是换行符-->
<property name="pattern" value="%dyyyy-MM-dd HH:mm:ss.SSS %c [%thread]
%-5level %msg%n"/>
<!--
Appender: 设置日志信息的去向,常用的有以下几个
ch.qos.logback.core.ConsoleAppender (控制台)
ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺
寸的时候产生一个新文件)
ch.qos.logback.core.FileAppender (文件)
-->
<appender name="console" 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>
<!--
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender><loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性
name:
用来指定受此logger约束的某一个包或者具体的某一个类。
level:
用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和
OFF,
如果未设置此属性,那么当前logger将会继承上级的级别。
additivity:
是否向上级loger传递打印信息。默认是true<logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个
logger
-->
<!--
也是<logger>元素,但是它是根logger。默认debug
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL
和 OFF,
<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个
logger。
-->
<root level="ALL">
<appender-ref ref="console"/>
</root>
</configuration>
我们在Resource下创建logback.xml日志文件
   <?xml version="1.0" encoding="UTF-8" ?>
    <configuration>
    
        <!--
            配置集中管理的属性
            直接使用该属性的value value格式":$name
        -->
        <property name="pattern" value="%dyyyy-MM-dd HH:mm:ss.SSS %c [%thread] %-5level %msg%n"/>
        <!--
            日志输出格式:
            %-5level
            %dyyyy-MM-dd HH:mm:ss.SSS日期
            %c类的完整名称
            %M为method
            %L为行号
            %thread线程名称
            %m或者%msg为信息
            %n换行
        -->
    
        <!--控制日志输出位置的Appender-->
        <appender name="console" 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>
        <root level="ALL">
            <appender-ref ref="console"></appender-ref>
        </root>
    </configuration>

FileAppender

日志输出到文件

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

    <!--
        配置集中管理的属性
        直接使用该属性的value value格式":$name
    -->
    <property name="pattern" value="%dyyyy-MM-dd HH:mm:ss.SSS %c [%thread] %-5level %msg%n"/>
    <!-- 日志文件存放目录 -->
    <property name="log_dir" value="d:/lianxi"></property>
    <!--
        日志输出格式:
        %-5level
        %dyyyy-MM-dd HH:mm:ss.SSS日期
        %c类的完整名称
        %M为method
        %L为行号
        %thread线程名称
        %m或者%msg为信息
        %n换行
    -->

    <!--控制日志输出位置的Appender-->
    <appender name="console" 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>
    <!--日志文件输出appender对象-->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <!--日志格式配置-->
        <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>$pattern</pattern>
        </encoder>
        <!--日志输出路径-->
        <file>$log_dir/logback.log</file>
    </appender>
    <root level="ALL">
        <appender-ref ref="console"></appender-ref>
        <appender-ref ref="file"></appender-ref>
    </root>
</configuration>

日志输出到Html

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

    <!--
        配置集中管理的属性
        直接使用该属性的value value格式":$name
    -->
    <property name="pattern" value="%dyyyy-MM-dd HH:mm:ss.SSS %c [%thread] %-5level %msg%n"/>
    <!-- 日志文件存放目录 -->
    <property name="log_dir" value="d:/lianxi"></property>
    <!--
        日志输出格式:
        %-5level
        %dyyyy-MM-dd HH:mm:ss.SSS日期
        %c类的完整名称
        %M为method
        %L为行号
        %thread线程名称
        %m或者%msg为信息
        %n换行
    -->

    <!--html格式日志文件输出appender对象-->
    <appender name="html" class="ch.qos.logback.core.FileAppender">
        <!--html日志格式配置-->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
           <layout class="ch.qos.logback.classic.html.HTMLLayout">
               <pattern>$pattern</pattern>
           </layout>
        </encoder>
        <!--日志输出路径-->
        <file>$log_dir/logback.html</file>
    </appender>
    <root level="ALL">
        <appender-ref ref="html"></appender-ref>
    </root>
</configuration>

日志拆分和归档Appender

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

    <!--
        配置集中管理的属性
        直接使用该属性的value value格式":$name
    -->
    <property name="pattern" value="%dyyyy-MM-dd HH:mm:ss.SSS %c [%thread] %-5level %msg%n"/>
    <!-- 日志文件存放目录 -->
    <property name="log_dir" value="d:/lianxi"></property>
    <!--
        日志输出格式:
        %-5level
        %dyyyy-MM-dd HH:mm:ss.SSS日期
        %c类的完整名称
        %M为method
        %L为行号
        %thread线程名称
        %m或者%msg为信息
        %n换行
    -->

    <!--控制日志输出位置的Appender-->
    <appender name="console" 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>
    <!--日志拆分和归档Appender-->
    <appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>$pattern</pattern>
        </encoder>
        <!--日志输出路径-->
        <file>$log_dir/roll_logback.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--指定具体实现规则-->
            <!--按照时间和压缩格式声明拆分的文件名-->
<!--            <fileNamePattern>$log_dir/rolling.%dyyyy-MM-dd-HH-mm-ss.log%i.gz</fileNamePattern>-->
            <fileNamePattern>$log_dir/rolling.%dyyyy-MM-dd-HH.log%i.gz</fileNamePattern>
            <!--按照文件大小拆分-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>
    <root level="ALL">
        <appender-ref ref="console"></appender-ref>
        <appender-ref ref="rolling"></appender-ref>
    </root>
</configuration>

日志级别过滤

只有大于等于设定级别会输出

  <appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>$pattern</pattern>
        </encoder>
        <!--日志输出路径-->
        <file>$log_dir/roll_logback.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--指定具体实现规则-->
            <!--按照时间和压缩格式声明拆分的文件名-->
<!--            <fileNamePattern>$log_dir/rolling.%dyyyy-MM-dd-HH-mm-ss.log%i.gz</fileNamePattern>-->
            <fileNamePattern>$log_dir/rolling.%dyyyy-MM-dd-HH.log%i.gz</fileNamePattern>
            <!--按照文件大小拆分-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--日志过滤规则-->
            <level>INFO</level>
            <!--超过当前级别放行-->
            <onMath>ACCEPT</onMath>
            <!--小于当前级别拦截-->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

异步日志

我们当前的日志与代码都是使用主线程执行的 记录完日志才会往下执行 所以我们引入了异步日志

<利用springboot+logback手写一个简单的链路追踪(代码片段)

...一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简单的链路追踪,下面详细介绍下。一、实现原理SpringBoot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打... 查看详情

logback的简单使用(代码片段)

logback的使用logback是由log4j的创始人设计的另一个开源日志组件,性能比log4j好LogBack主要分为三个模块:logback-core:其他两个模块的基础模块logback-class:它是log4j的改良版本,完整实现了Slf4jAPIlogback-access:访问模块与... 查看详情

springbootlogback日志组件使用(代码片段)

一logback简介    Logback是一个开源日志组件。Logback一般和SLF4结合起来使用。外层使用SLF4J,里面的实现是logback。什么意思,简单来说我们使用层看到的是SLF4J。我们使用的时候就是和SLF4J提供的一些api打交道。    我们可能... 查看详情

xmlspringboot简单的logback.xml(代码片段)

查看详情

slfj4+logback(代码片段)

...再代码中或配置文件中指定使用的那个具体的日志系统。logback:是由log4j创始人设计的一个开源日志组件。logback当前分成三个模块:logback-core,logback-classic和logback-access。l 查看详情

logback的简单分析(代码片段)

目录1、根节点包含的属性2、根节点的子节点 2.1、设置上下文名称: 2.2、设置loger、root 正文OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALLlog4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为... 查看详情

logback简单配置记录(代码片段)

 <?xmlversion="1.0"encoding="UTF-8"?><!--scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan... 查看详情

logback介绍和配置详解(代码片段)

logback是java的日志开源组件,是log4j创始人写的,性能比log4j要好,目前主要分为3个模块logback-core:核心代码模块logback-classic:log4j的一个改良版本,同时实现了slf4j的接口,这样你如果之后要切换其他日志组件也是一件很容易的事lo... 查看详情

logback-defender实现日志脱敏(代码片段)

Gitee地址https://gitee.com/JustryDeng/logback-defenderlogback-defender介绍  logback-defender是一款基于logback实现的无侵入的日志脱敏工具框架,使用此框架,只需要简单的三步。功能特性(默认提供)支持json脱敏器(默认提供)支持string脱... 查看详情

springbootlogback配置详解(代码片段)

一.了解简单地说,Logback是一个Java领域的日志框架。它被认为是Log4J的继承人。Logback主要由三个模块组成:logback-corelogback-classiclogback-accesslogback-core是其它模块的基础设施,其它模块基于它构建,显然,logback-core提供了一些关键... 查看详情

logback的使用和logback.xml详解,在spring项目中使用log打印日志(代码片段)

logback的使用和logback.xml详解一、logback的介绍  Logback是由log4j创始人设计的另一个开源日志组件,官方网站:http://logback.qos.ch。它当前分为下面下个模块:  logback-core:其它两个模块的基础模块  logback-classic:它是log4j的一... 查看详情

源码详解系列------全面讲解logback的使用和源码(代码片段)

什么是logbacklogback用于日志记录,可以将日志输出到控制台、文件、数据库和邮件等,相比其它所有的日志系统,logback更快并且更小,包含了许多独特并且有用的特性。logback被分成三个不同的模块:logback-core,logback-classic,logba... 查看详情

logback使用以及详细配置(代码片段)

...个切面放到项目里,一个项目的日志记录是非常重要的2.logback提供具有log4j基本的日志服务,同事也具备log4j不具备的功能,比如:日志回滚打包,log4j需要自己写代码去实现3.导入logback需要的jar包这里需要3个包:slf4j-api.jarlogback... 查看详情

logback中%x的使用(代码片段)

1.参考资料https://gist.github.com/logogin/ff44c254f655340b653chttp://www.cnblogs.com/zhudongchang/p/6861375.html2.环境Java:jdk1.8.0_144Logback:1.0.133.%X的使用方法%X用于输出和当前线程相关联的NDC(嵌套诊断环境),在代码中给org.slf4j.MDC添加k 查看详情

slf4j+logback实现日志输出和记录(代码片段)

一、SLF4J   SLF4J,即简单日志门面(SimpleLoggingFacadeforJava),不是具体的日志解决方案,它只服务于各种各样的日志系统。在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。   使用... 查看详情

logback的使用和logback.xml详解(代码片段)

一、logback的介绍Logback是由log4j创始人设计的另一个开源日志组件,官方网站:http://logback.qos.ch。它当前分为下面下个模块:logback-core:其它两个模块的基础模块logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4jAPI使你... 查看详情

logback的使用和原理(代码片段)

logback的使用和原理1依赖关系在pom文件中引入springbootstarter依赖,自动引入了这三个依赖,而这三个依赖,就是logback日志框架进行日志操作的。<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>s... 查看详情

springboot使用默认的logback配置logback-spring.xml每天一个日志文件(代码片段)

文章目录logbackapplication.yml配置logback-spring.xml内容部署启动(2)application.yml放在resources下使用logbackspringboot配置每天一个日志文件logback-spring.xmlspringboot工程配置文件可以放在多个地方,可以直接放在resources目录下,也可以放... 查看详情