zoukankan      html  css  js  c++  java
  • Logback日志配置的简单使用

    Logback介绍

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

    Logback的优点

    1. 执行速度快,初始化内存加载小;
    2. 原生实现了 SLF4J API,不需要进行转换;
    3. 配置简单,并可以适应多种环境;
    4. 可以定时的删除过期日志;
    5. 更为强大的过滤器,不必因更改日志级别而产生大量的日志;
    6. 可以从 IO 错误中进行恢复;
    7. ....
      关于logback的优点还有很多,这里我就不一一列举了。详细的可以查看官方的Api文档。
      地址:https://logback.qos.ch/documentation.html

    Logback的配置说明

    关于这块的配置说明,我就简单的列举一些比较常用配置来进行说明。如果还想了解更多,请看官方的文档说明。

    Logback的层级说明

    简单的层级结构,实际有更多,仅供参考。

    configuration  
        root
        logger                     
    	property                        
        appender 
    		layout 
    		rollingPolicy
    		   Pattern
    		   fileNamePattern
    		   maxFileSize
    		   maxHistory
    		   totalSizeCap
    

    具体说明

    configuration 根节点, 一般有三个属性,分别是scan、scanPeriod和debug。

    • scan:是否自动加载,默认为true。
    • scanPeriod:监听修改时间间隔,默认一分钟。
    • debug: 是否查看logback运行状态,默认true。

    那么我们要使用这个的话,可以进行如下配置:

    <configuration  scan="true" scanPeriod="30 seconds" debug="true">
    ...
    </configuration>
    

    root 和logger 子节点,用于指定输入的日志级别。

    • root :这个是指定主日志的级别。
    • logger :这个是指定自定义日志的级别。

    说明:root 指定的日志级别就是用类进行输出的日志,例如:

      private static Logger LOG = LoggerFactory.getLogger(logbackTest.class);
    

    logger 指定的日志级别是自定义的级别,例如:

    private static Logger LOG2 = LoggerFactory.getLogger("oneInfo");
    

    他们的用法如下:

    <logger name="oneInfo" level="DEBUG" additivity="false">
    	   <appender-ref ref="ONE_INFO" />
    	</logger>
    	<root level="INFO">
    		<appender-ref ref="STDOUT"/>
    		<appender-ref ref="FILE" />
    	</root>
    

    说明二: level 是日志输出的级别,additivity表示是否在控制台打印该日志。

    property 子节点,一般用来定义变量值。有两个属性name和value。类似Java中Map的key和value。

    • name: 变量的名称
    • value: 变量的值

    用法如下:

    <property name="LOG_HOME" value="logs/pcm"/>
    

    说明:value指定的文件路径,会在项目同级目录下自动生成,无需手动创建。

    appender 子节点,负责写日志的组件。有两个属性,name和class。

    • name: 自定义名称。
    • class:对应自定义名称的全限定名,就是使用何种方式进行日志的输出。

    这个非常重要,也可以说是logback的核心吧。简单的用法如下:

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

    说明:定义一个STDOUT名称,在控制台进行输出。

    layout和Pattern 这两个一般是一起使用的。

    • layout:格式化日志信息;
    • Pattern :layout 子节点,定义输出信息的格式;

    简单的用法如下:

    <layout class="ch.qos.logback.classic.PatternLayout">
    			<Pattern>
    				%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
    			</Pattern>
    </layout>
    

    说明:Pattern里面格式的%d表示输出的时间格式,%thread 表示输出的线程名称,%-5level 表示字符宽度,%msg 表示输出的信息,%n表示换行。

    rollingPolicy、fileNamePattern、maxFileSize、 maxHistory和totalSizeCap 这些一般用于对日志进行滚动,也就是日志切割管理之类的。

    • rollingPolicy: 决定日志滚动行为,一般用于日志切割。
    • fileNamePattern:必要的节点,一般用于指定日志的文件的路径以及生成格式。
    • maxFileSize:单个日志文件最大值,达到之后就进行切割。
    • maxHistory:日志文件最多保留的天数,也就是过期时间。
    • totalSizeCap : 日志文件总体的最大值,达到之后就不再产生日志。

    简单的用法如下:

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    			<fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
    			<maxFileSize>10MB</maxFileSize>
    			<maxHistory>31</maxHistory>
    			<totalSizeCap>10GB</totalSizeCap>
    		</rollingPolicy>
    	</appender>
    

    说明:这段的配置意义是,每天产生一个日志文件,如果超出了10M,日志就进行切割,并且在日志文件名称上加一,日志文件最多保持31天,日志文件总共最大为10G。

    Logback使用说明

    在对logback日志的配置文件进行了简单的说明之后,那我们来简单的使用logback吧。
    logback.xml 使用需要依赖三个 jar 包,分别是 slf4j-api,logback-core,logback-classic。
    mavan配置如下:

    <dependency>
       	 <groupId>org.slf4j</groupId>
       	 <artifactId>slf4j-api</artifactId>
       	 <version>1.7.25</version>
    	</dependency>
        
        
        <dependency>
        	<groupId>ch.qos.logback</groupId>
        	<artifactId>logback-classic</artifactId>
        	<version>1.2.3</version>
    	</dependency>
        
        <dependency>
        	<groupId>ch.qos.logback</groupId>
        	<artifactId>logback-core</artifactId>
        	<version>1.2.3</version>
    	</dependency>
    

    成功在maven添加依赖包之后,我们写个简单的demo来测试下吧。
    定义三个log日志,一个主log,两个自定义log。
    整体配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration  scan="true" scanPeriod="30 seconds" debug="true">
    	<property name="LOG_HOME" value="logs/pcm"/>
    	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    		<layout class="ch.qos.logback.classic.PatternLayout">
    			<Pattern>
    				%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
    			</Pattern>
    		</layout>
    	</appender>
    	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    			<fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
    			<maxFileSize>10MB</maxFileSize>
    			<maxHistory>31</maxHistory>
    			<totalSizeCap>10GB</totalSizeCap>
    		</rollingPolicy>
    		<layout class="ch.qos.logback.classic.PatternLayout">
    			<Pattern>
    				%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
    			</Pattern>
    		</layout>
    	</appender>
    	
        <appender name="ONE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    			<!-- rollover daily -->
    			<fileNamePattern>${LOG_HOME}/oneInfo/%d{yyyy-MM-dd}/oneInfo.%i.txt</fileNamePattern>
    			<maxFileSize>10MB</maxFileSize>
    			<maxHistory>31</maxHistory>
    			<totalSizeCap>10GB</totalSizeCap>
    		</rollingPolicy>
    		<layout class="ch.qos.logback.classic.PatternLayout">
    			<Pattern>
    				%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
    			</Pattern>
    		</layout>
    	</appender>
    	
        <appender name="TWO_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    			<!-- rollover daily -->
    			<fileNamePattern>${LOG_HOME}/twoInfo/%d{yyyy-MM-dd}/twoInfo.%i.txt</fileNamePattern>
    			<maxFileSize>10MB</maxFileSize>
    			<maxHistory>31</maxHistory>
    			<totalSizeCap>10GB</totalSizeCap>
    		</rollingPolicy>
    		<layout class="ch.qos.logback.classic.PatternLayout">
    			<Pattern>
    				%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
    			</Pattern>
    		</layout>
    	</appender>
    	
    	<logger name="oneInfo" level="DEBUG" additivity="false">
    	   <appender-ref ref="ONE_INFO" />
    	</logger>
    	<logger name="twoInfo" level="WARN" additivity="true">
    	   <appender-ref ref="TWO_INFO" />
    	</logger>
    	
    	<root level="INFO">
    		<appender-ref ref="STDOUT"/>
    		<appender-ref ref="FILE" />
    	</root>
    
    </configuration>
    

    然后分别在控制台输出和文件中进行输出。
    该java的代码示例如下:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * 
    * Title: logbackTest
    * Description:
    * logback日志测试 
    * Version:1.0.0  
    * @author pancm
    * @date 2018年1月24日
     */
    public class logbackTest {
    	private static Logger LOG = LoggerFactory.getLogger(logbackTest.class);
    	private static Logger LOG2 = LoggerFactory.getLogger("oneInfo");
    	private static Logger LOG3 = LoggerFactory.getLogger("twoInfo");
    	
    	public static void main(String[] args) {
    		test();
    	}
    	
    	private static void test(){
    
    		LOG.debug("主程序的debug");
    		LOG.info("主程序的info");
    		LOG.warn("主程序的warn");
    		LOG.error("主程序的error");
    		
    		LOG2.debug("oneInfo的debug");
    		LOG2.info("oneInfo的info");
    		LOG2.warn("oneInfo的warn");
    		LOG2.error("oneInfo的error");
    		
    		LOG3.debug("twoInfo的debug");
    		LOG3.info("twoInfo的info");
    		LOG3.warn("twoInfo的warn");
    		LOG3.error("twoInfo的error");
    	}
    

    输出结果如下:

    这里写图片描述

    日志的生成目录:
    这里写图片描述

    输出结果的说明:

    • LOG: 因为设置打印的级别是info,所以debug级别的不会打印 。
    • LOG2: 因为自定义配置设定的是 additivity="false" 不在控制台打印。 所以一条都不会打印,但是debug级别以上的日志可以在logs/pcm/oneInfo中查看。
    • LOG3: 因为自定义配置设定的是 additivity="true" 可以在控制台打印。所以会打印两条warn级别的日志,日志也可以在logs/pcm/oneInfo中查看。

    其它

    参考:
    https://logback.qos.ch/documentation.html
    https://www.cnblogs.com/warking/p/5710303.html

    到此,本文的logback日志简单讲解结束,谢谢阅读!

  • 相关阅读:
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Linux下的iwpriv(iwlist、iwconfig)的简单应用
    OCX控件的注册卸载,以及判断是否注册
    .OCX、.dll文件注册命令Regsvr32的使用
  • 原文地址:https://www.cnblogs.com/xuwujing/p/8353543.html
Copyright © 2011-2022 走看看