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日志简单讲解结束,谢谢阅读!

  • 相关阅读:
    js:delete 操作符
    ActiveReports 代码控制报表连续打印
    ActiveReports 打印条码无法设置纸张大小?
    《JavaScript高级程序设计》读书笔记之一:几个与原始类型等价的引用类型的常用方法和属性
    js:字符串类型快速转化成数字类型和数字类型快速转化为字符串类型
    js:for...in 语句(JavaScript For...In Statement)
    Internet Explorer Developer Toolbar
    javascript 定义对象的方法
    关于 输入框输入一定数以后跳转的问题
    javascript 关于弹出关闭的例子
  • 原文地址:https://www.cnblogs.com/xuwujing/p/8353543.html
Copyright © 2011-2022 走看看