logback配置

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一、logback介绍 logback分成三个模块:logback-core,logback- classic,logback-access。 logback-core:提供了logBack的核心功能,是另外两个组件的基础; logback-classic:实现了SLF4J API; logback

一、logback介绍


logback分成三个模块:logback-core,logback- classic,logback-access。


logback-core:提供了logBack的核心功能,是另外两个组件的基础;


logback-classic:实现了SLF4J API;


logback-access:与Servlet容器集成提供Http来访问日志的功能。


二、logback使用


1、快速上手


1)添加依赖


<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.0.13</version>
</dependency>


2)在resource目录下新建配置文件logback.xml


<!--每天生成一个文件,归档文件保存30天:-->
<configuration >
    <!--设置自定义pattern属性-->
    <property name="pattern" value="%d{HH:mm:ss.SSS} [%-5level] [%thread] [%logger] %msg%n"/>
    <!--控制台输出日志-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--设置控制台输出日志的格式-->
        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    <!--滚动记录日志文件:-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--当天生成的日志文件名称:-->
        <file>/tmp/log.out</file>
        <!--根据时间来记录日志文件:-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--归档日志文件的名称:-->
            <fileNamePattern>testLog-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--归档文件保存30天-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!--生成的日志信息格式-->
        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    <!--根root logger-->
    <root level="DEBUG">
        <!--设置根logger的日志输出目的地-->
        <appender-ref ref="FILE" />
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>


2、logback配置详解


logback配置文件结构如下:


 

1)配置根节点configuration


<configuration scan="true" scanPeriod="60" debug="false"></configuration>

scan:程序运行时配置文件被修改,是否重新加载。true,重新加载;false,不重新加载;默认为true;


scanPeriod:监测配置文件被修改的时间间隔,scan属性必须设置为true才可生效;默认为1分钟,默认单位是毫秒;


debug:是否打印logback程序运行的日志信息。true,打印;false,不打印;默认为false;


2)自定义属性变量property


<property name="pattern" value="%d{HH:mm:ss.SSS} [%-5level] [%logger] %msg%n" ></property>


我们可以通过property定义一些列属性,然后通过 ${} 的方式来使用,将变量引入到其他节点中去。如果有多处使用相同的内容,便可使用属性变量的方式进行统一,减少很多不必要的代码;


3)日志对象logger


logger分为2种,一种是普通日志对象,另一种是根日志对象。对于大部分应用来说,只设置根日志对象即可。 在java日志系统中,无论是log4j还是logback,他们的日志对象体系都是呈现“树”的形式,根日志对象为最顶层节点,其余包或者类中的日志对象都继承于根日志节点; 对于普通日志对象来说,我们可以设置某一个包或者某一个类的日志级别,还可以单独设置日志的输出目的地。


<logger name="java.sql" level="debug" addtivity="true">
        <appender-ref ref="CONSOLE" />
</logger>


name:用来指定此logger属于哪个包或者哪个类;


level:用来指定此logger的日志打印级别;


addtivity:是否向上传递日志打印信息。之前说了,logger对象呈现一个树的结构,根logger是树的顶端,下面的子logger的addtivity属性如果设置为true则会向上传递打印信息,出现日志重复打印的现象;


appender-ref:日志输出目的地,将此logger所打印的日志交给此appender;


上面的例子中,如果此logger没有指定appender,而且addtivity也设置为true,那么此logger对应的日志信息只会打印一遍,是由root来完成的;但是如果addtivity设置成false,那么此logger将不会输出任何日志信息;


4)根日志对象root


<root level="DEBUG">
        <appender-ref ref="CONSOLE" />
</root>


跟日志也是日志对象中的一种,但它位于logger体系中的最顶层。当一个类中的logger对象进行打印请求时,如果配置文件中没有为该类单独指定日志对象,那么都会交给root根日志对象来完成; <root>节点中只有一个level属性,并且还可以单独指定日志输出目的地<apender-ref>;


5)日志输出目的地appender


appender整体结构如下:


 

appender中有2个必填属性name和class。name为<appender>节点的名称,class为<appender>的全限定类名,也就是日志输出目的地的处理类。此外,我们还可以在<appender>中单独指定日志的格式,设置日志过滤器等操作;


在logback中,主要有以下三种日志目的地处理类:


ch.qos.logback.core.ConsoleAppender:将日志输出到控制台


<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">  
    <encoder>  
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>  
    </encoder>  
</appender>


ch.qos.logback.core.FileAppender:日志输出到文件;


<appender name="FILE" class="ch.qos.logback.core.FileAppender">  
    <file>e:/log.out</file>  
    <append>true</append>  
    <prudent>false</prudent>
    <encoder>  
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>  
    </encoder>  
</appender>


ch.qos.logback.core.rolling.RollingFileAppender:滚动记录日志,当符合

<rollingPolicy>节点中设置的条件时,会将现有日志移到新的文件中去。<rollingPolicy>节点中可设置的条件为:文件的大小、时间等;


<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/tmp/log.out</file>
    <append>true</append>  
    <prudent>false</prudent>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>testLog-%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>


其中<rollingPolicy>可配置为以下几种:


ch.qos.logback.core.rolling.TimeBasedRollingPolicy:根据时间制定日志文件的滚动策略;


ch.qos.logback.core.rolling.FixedWindowRollingPolicy:表示如果日志文件大小超过指定范围时,会根据文件名拆分成多个文件;


ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy:表示根据日志文件大小,超过指定大小会触发日志滚动;


ch.qos.logback.classic.AsyncAppender:异步记录日志,内部通过使用缓存的方式来实现异步打印,将日志打印事件event放入缓存中。具体数据结构为BlockingQueue;


<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/tmp/log.out</file>
    <append>true</append>  
    <prudent>false</prudent>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>testLog-%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>


6)日志格式化节点encoder


负责格式化日志信息。<encoder>只负责了两件事情,第一负责将日志信息转换成字节数组,第二将字节数组写到输出流当中去;


在<encoder>中使用<pattern>来设置对应的格式:


<encoder>   
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
</encoder>


%logger:表示输出logger名称,后面跟一个{0}表示:只输出logger最右边点符号之后的字符串;例如:com.jiaboyan.test ---> test;


%d{HH:mm:ss.SSS}:表示格式化日期输出,14:06:49.812;


%line:输出执行日志请求的行号。


%thread:表示产生日志的线程名;


%level:输出日志级别;


%method:输出执行日志请求的方法名;


%class:输出日志打印类的全限定名,后面跟{0}表示,含义为全限定类名最右边点符号之后的字符串。例如:com.jiaboyan.test ---> test;


%-4relative含义:符号减号“-”是左对齐 标志,接着是可选的最小宽度 修饰符,用十进制数表示。relative是输出从程序启动到创建日志记录的时间,单位是毫秒;


%msg:表示应用程序提供需要打印的日志信息;


%n:表示换行符;


分类: JAVA

相关文章
|
Java
解决logback不能打印日志的问题
解决logback不能打印日志的问题
703 0
|
6月前
|
监控 Java 测试技术
日志框架到底是Logback 还是 Log4j2
日志框架到底是Logback 还是 Log4j2
50 0
|
Java API 计算机视觉
springboot启动报错LoggerFactory is not a Logback LoggerContext but Logback...
今天做人脸识别的Demo,引入的百度的API,里面用了slf4j,然后就导致日志冲突了。
|
XML 安全 Oracle
logback的使用和logback.xml详解
logback的使用和logback.xml详解
|
监控 Java Shell
(二)Logback配置
Logback通过加载配置文件的方式来初始化配置,配置文件的加载顺序如下: 1)Logback首先会去类路径下找名为logback-test.xml的文件。 2)如果没有找到如上文件,会去类路径下找名为logback.groovy的文件。 3)如果没有找到如上文件,会去类路径下找名logback.xml的文件。
(二)Logback配置
|
Java Spring 移动开发
【spring boot logback】日志logback格式解析
日志logback格式解析  logback官网 格式解析 https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout 官网格式解析有所有完整的说明。
2186 1
|
Java jenkins Linux
Logback使用总结
整理了下logback的常用点功能,并记录了一些在使用过程中的疑问,和问题的排错过程,防止自己再犯类似错误,也希望对路过的你有所帮助。
670 0
|
XML Java API
05、logback(日志实现框架)(一)
05、logback(日志实现框架)(一)
05、logback(日志实现框架)(一)
|
Java 应用服务中间件 API
05、logback(日志实现框架)(二)
05、logback(日志实现框架)(二)
05、logback(日志实现框架)(二)
|
Java Shell
Logback 配置
logback 会在类路径下寻找名为 logback-test.xml 的文件。 如果没有找到,logback 会继续寻找名为 logback.groovy 的文件。 如果没有找到,logback 会继续寻找名为 logback.xml 的文件。 如果没有找到,将会通过 JDK 提供的 ServiceLoader 工具在类路径下寻找文件 META-INFO/services/ch.qos.logback.classic.spi.Configurator,该文件的内容为实现了 Configurator 接口的实现类的全限定类名。 如果以上都没有成功,logback 会通过 BasicConfig
467 0