日志-logback


参考:http://www.importnew.com/22290.html

一 概述

  1.1 LogBack、Slf4j和Log4j之间的关系

    1)Slf4j(The Simple Logging Facade for Java)是一个简单日志门面抽象框架本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j,LogBack,java.util.logging使用;Slf4j作为应用层的Log接入时,程序可以根据实际应用场景动态调整底层的日志实现框架(Log4j/LogBack/JdkLog…)。

    2)LogBack是Log4j的改良版本详;细数据可参照下面地址:Reasons to prefer logback over log4j

  1.2 logback 结构

    分为三个部分:logback-core,logback-classic,logback-access

    logback-core:logback核心功能,其他两部分基础;

    logback-classic:实现了slf4j接口,当想要配合slf4j使用需要将logback-classic加入classpath

    logback-access:集成Servlet环境准备,可提供HTTP-acess日志接口

二 配置详解

  2.1 根节点包含的属性

  • scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true.
  • scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟.
  • debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

XML代码:

"true" scanPeriod="60 second" debug="false"> 
       

  2.2 根节点的子节点appender, logger和root

    :每个logger都关联到logger上下文,默认上下文名称为“default”

    :类似定义一个变量

"true" scanPeriod="60 second" debug="false">  
      "APP_Name" value="myAppName" />   
      ${APP_Name}  
        

    :获取时间戳字符串

"true" scanPeriod="60 second" debug="false">  
      "bySecond" datePattern="yyyyMMdd'T'HHmmss"/>   
      ${bySecond}  
        

  2.3 logger和root

    logger设置某一个包或者具体的某一个类的日志打印级别

    root:它是根logger

    appender配置

      ConsoleAppender;FileAppender;RollingFIleAppender;TimeBasedRollingPolicy;FixedWindowRollingPolicy;SizeBasedTriggeringPolicy

    作用

    将日志写到文件中和控制台中

  2.4 获得日志对象

    1)Logger log = LoggerFactory.getLogger(class)

    2)通过在对应类上注解@Slf4j,使用日志对象log即可

三 案例介绍

例子中有详细功能介绍

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

"true" scanPeriod="60 second" debug="false">
 
    
    "STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 
        
        
            [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%5level] [%thread] %logger{0} %msg%n
            UTF-8
        
    
 
    
    "DEBUG" class="ch.qos.logback.core.FileAppender">
        debug.log
        
        true
        class="ch.qos.logback.classic.filter.LevelFilter">
            
            DEBUG
            ACCEPT
            DENY
        
        
            [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%5level] [%thread] %logger{0} %msg%n
            UTF-8
        
    
 
    
    "INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        info.log
 
        
        class="ch.qos.logback.classic.filter.ThresholdFilter">
            INFO
        
 
        
            [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%5level] [%thread] %logger{0} %msg%n
            UTF-8
        
 
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            info.%d{yyyy-MM-dd}.log
            30
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                100MB
            
        
    
 
    
    
        
        
        
            
            
                
                
            
            
            
        
 
        
            
            
        
    
 
    "ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        error.log
 
        
            [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%5level] [%thread] %logger{0} %msg%n
            UTF-8
        
 
        
        class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            error.%d{yyyy-MM}(%i).log.zip
            1
            3
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                100MB
            
            30
        
    
 
    
    "ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
        
        0
        
        512
        
        ref ref ="ERROR"/>
    
 
    
    "ch.qos.logback" />
 
    
    "com.weizhi.common.LogMain" level="INFO" additivity="false">
        ref ref="STDOUT"/>
        
        
        
        
        ref ref="ASYNC"/>
    
 
    
    "DEBUG">
        ref ref="STDOUT"/>
        
        
        
        ref ref="ASYNC"/>
    

 按天记录日志文件同时每天日志文件达到一定峰值新增日志文件

"true" scanPeriod="10 seconds">
    "org/springframework/boot/logging/logback/base.xml" />
    "LOG_PATH" value="/usr/local/tomcat/logs/tyzx" />
    "INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        ${LOG_PATH}/info.log
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            ${LOG_PATH}/info-%d{yyyyMMdd}.log.%i
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                500MB
            
            5
        
        class="ch.qos.logback.classic.PatternLayout">
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n
            
        
    

    "ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        class="ch.qos.logback.classic.filter.ThresholdFilter">
            ERROR
        
        ${LOG_PATH}/error.log
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            ${LOG_PATH}/error-%d{yyyyMMdd}.log.%i
            
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                500MB
            
            2
        
        class="ch.qos.logback.classic.PatternLayout">
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n
            
        
    
    
    "INFO">
        ref ref="INFO_FILE" />
        ref ref="ERROR_FILE" />