日志框架和logback

一 日志框架

参考:https://www.cnblogs.com/chenhongliang/p/5312517.html
介绍了多个日志框架,以及slf4j的原理

二 常用名词

Logger

日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
Logger 可以被分配有效级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于 ch.qos.logback.classic.Level类。如果 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。root logger 默认级别是DEBUG
打印方法决定记录请求的级别.记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,才会真正地打印

Appender

主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。

ConsoleAppender

输出到控制台

FileAppender

输出到文件

RollingFileAppenderRollingFileAppender继承自FileAppender,并有滚动日志文件的能力。

RollingFileAppender有两个重要的组件。第一个组件是RollingPolicy,它决定怎样滚动;第二个组件是TriggeringPolicy,它决定什么时候执行滚动。
从字面上也很好理解,触发策略决定什么时候发生滚动,而滚动策略则定义当滚动发生的时候做什么。因此,RollingPolicy就是what,TriggeringPolicy就是when。

RollingPolicy

  1. TimeBasedRollingPolicy:TimeBasedRollingPolicy是最受欢迎的rolling策略。它是基于时间的,例如:按天或者按月。
  2. Size and time based rolling policy:有时候你可能希望按天归档文件,与此同时还想限制每个日志文件的大小。为了达到这个目的,可以使用SizeAndTimeBasedRollingPolicy
    注意,TimeBasedRollingPolicy已经运行你限制总的日志文件大小。通过设置totalSizeCap
    注意,%i和%d是强制的。每次当前日志达到maxFileSize时将被归档,并且带一个自增的从0开始的index

SizeBasedTriggeringPolicy
SizeBasedTriggeringPolicy只接受一个参数,参数的名字是maxFileSize,它的默认值是10MB。

Layout

负责把事件转换成字符串,格式化的日志信息的输出。

logger context

各个logger 都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各 logger。其他所有logger也通过org.slf4j.LoggerFactory 类的静态方法getLogger取得。 getLogger方法以 logger 名称为参数。用同一名字调用LoggerFactory.getLogger 方法所得到的永远都是同一个logger对象的引用。

Filter

Filter有三种回复,分别是ACCEPT(接受)、NEUTRAL(不接受也不拒绝)、DENY(拒绝)

LevelFilter

LevelFilter是基于事件的级别来过滤的,如果事件的级别与配置的级别相等,接受或者拒绝这个事件取决于onMatch和onMismatch配置。

ThresholdFilter

ThresholdFilter过滤器是基于threshold(阈值)过滤的。对于级别等于或者高于threshold的事件,当它的decide()方法被调用的时候ThresholdFilter过滤器将回复NEUTRAL。
级别低于threshold的事件将被拒绝

EvaluatorFilter

EvaluatorFilter是EventEvaluator的一个封装。EventEvaluator会计算给定的事件是否满足指定的条件。
通过指定onMatch和onMismatch属性,EvaluatorFilter将返回匹配还是不匹配。
注意,EventEvaluator是一个抽象类,你可以实现自己的逻辑。

JaninoEventEvaluator
JaninoEventEvaluator是EventEvaluator的一个具体实现。
JaninoEventEvaluator用任意的Java代码块返回的一个boolean值作为条件计算的结果。我们把这种Java语音的boolean表达式称之为“计算表达式”。计算表达式在计算过程中非常灵活。

三 配置

默认配置

如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置。最小化配置由一个关联到根 loggerConsoleAppender组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的 PatternLayoutEncoder 进行格式化。root logger 默认级别是 DEBUG。

使用步骤

加载配置地顺序

  1. 尝试在 classpath 下查找文件 logback-test.xml;
  2. 如果文件不存在,则查找文件 logback.xml;
  3. 如果两个文件都不存在,logback 用 Bas icConfigurator 自动对自己进行配置,这会导致记录输出到控制台。

配置文件




      
      
       
    
         
              
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
         
    
       
       
        
            
            ${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log 
            
            30
           
         
             
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
         
        
       
         10MB
       
     
    
      
      
      
    
      
    
     
    
    
    
    
    
    
    
        
        
     
       
    
         
        
            
           
              com.mysql.jdbc.Driver
              jdbc:mysql://127.0.0.1:3306/databaseName
              root
              root
            
        
  

java中使用

package com.stu.system.action; 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BlogAction{
     //定义一个全局的记录器,通过LoggerFactory获取
     private final static Logger logger = LoggerFactory.getLogger(BlogAction.class); 
     /**
     * @param args
     */
    public static void main(String[] args) {
        logger.info("logback 成功了");
        logger.error("logback 成功了");
    }
}

按级别分开记录



    
    SpringBootDemo
    
    
    

    
    
        
        ${LOG_PATH}/${APPDIR}/log_error.log
        
        
            
            ${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log
            
            
                2MB
            
        
        
        true
        
        
            ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
            utf-8
        
        
        
            error
            ACCEPT
            DENY
        
    

    
    
        
        ${LOG_PATH}/${APPDIR}/log_warn.log
        
        
            
            ${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
            
            
                2MB
            
        
        
        true
        
        
            ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
            utf-8
        
        
        
            warn
            ACCEPT
            DENY
        
    

    
    
        
        ${LOG_PATH}/${APPDIR}/log_info.log
        
        
            
            ${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log
            
            
                2MB
            
        
        
        true
        
        
            ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
            utf-8
        
        
        
            info
            ACCEPT
            DENY
        
    

    
        
        
            ===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n
            utf-8
        
        
        
            debug
        
    

    
    

    
    
        
        
        

        
        
    

参考

  1. Spring boot——logback 基础使用篇(一)
  2. Logback配置

你可能感兴趣的:(日志框架和logback)