[java]55、SpringBoot日志处理

1、日志的发展史

1、最原始的打印日志
System.outSystem.err
2、JUL(Java Util Logging)
JDK自带的日志框架,在java.util.logging包下
API不完善、对开发者不友好,很少人使用
3、Log4j(Log For Java)
Apache组织推出,1.x版本于2015-08-05宣布停止维护
4、JCL(Jakarta Commons Logging)
Apache组织推出的日志门面接口
提供一套API来实现不同Logger之间的切换
5、SLF4J(Simple Logging Facade For Java
Log4j作者开发的日志门面接口,比JCL更优秀更好用
6、Logback
Log4j作者开发,比Log4j 1.x的性能高很多,实现了SLF4J
7、Log4j2
Apache组织推出的,Log4j 1.x的重大升级改进版,改进了Logback的一些问题,既是门面接口,又是日志实现

2、Log4j

log4japache推出的日志实现,于2015年停止更新了,目前最新版本为1.2.17

2.1、在pom.xml中配置

    log4j
    log4j
    1.2.17

2.2、配置文件

classpath:log4j.xml(优先级高)、classpath:log4j.properties

log4j.rootLogger=TRACE, console
# 输出目标(控制台,文件)
# log4j.appender.名称=Appender的类型
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.encoding=UTF-8
# layout:输出格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# %-5p错误信息、%t线程、%m错误信息、%n换行
log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] [%t]: %m%n
2.3、日志级别

日志级别由小到大:
TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF

2.4、pattern

%cLogger的全类名
%C: 日志调用所在类,如: com.sj.log.Slf4jAndLogbackMain
%d:时间,%d{yyyy-MM-dd HH:mm:ss.SSS}
%t:线程的名称
%F:文件名
%L:代码行号
%M:方法
%l:代码的具体位置(哪个类的哪个方法?哪一行?)
%m:消息
%n:换行
%p:日志级别
%%:一个%
%pid:进程号
%threadId(简写:%tid):线程号
%exception(简写:%ex):异常记录
宽度设置
%20logger:当字符数少于20个字符时,则左侧留空白;
%-20logger:当字符数少于20个字符时,则右侧留空白;
%.30logger:当字符数据大于30个时,则截断;
显示设置
%highligth:突出显示
%green(%red、%blue、%white):字体显示为指定颜色
{length}可指定长度,如%logger{36}

2.5、子Logger

Logger

Logger可以是包级别、类级别
所有子Logger的最终父LoggerrootLogger
Logger默认会继承父LoggerAppender
additivity:代表不继承关系

# 从下到上依此为继承关系
log4j.rootLogger=TRACE, console3
# 默认继承rootLogger
log4j.logger.com.sj.test=ERROR, console3
# 子Logger会默认继承父Logger的Appender
log4j.logger.com.sj.test.TestLog4j1_04=FATAL, console4
# additivity不继承关系
log4j.additivity.com.sj.test.TestLog4j1_04=FATAL, console4
2.6、日志输入到文件

1、file:只输入到一个文件中。

encoding=UTF-8
pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] [%t]: %m%n
log4j.rootLogger=TRACE, file
#输出到文件(FileAppender)
log4j.appender.file=org.apache.log4j.FileAppender
# 文件名称
log4j.appender.file.file=log4j.log
log4j.appender.file.encoding=${encoding}
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=${pattern}

2、rollingFile:文件大小超过一定的值时会出入到新的文件中。

encoding=UTF-8
pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] [%t]: %m%n
log4j.rootLogger=TRACE, rollingFile
#输出到文件(FileAppender)
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
# 生成的文件最大索引值(备份文件个数)
log4j.appender.rollingFile.maxBackupIndex=10
# 每个备份文件的大小
log4j.appender.rollingFile.maxFileSize=10KB
# 输出到的文件目录
log4j.appender.rollingFile.file=log4j.log
log4j.appender.rollingFile.encoding=${encoding}
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.conversionPattern=${pattern}

3、dailyRollingFile:它能够按一定的频度滚动日志记录文件。

encoding=UTF-8
pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] [%t]: %m%n
log4j.appender.dailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFile.datePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.dailyRollingFile.file=log4j.log
log4j.appender.dailyRollingFile.encoding=${encoding}
log4j.appender.dailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.conversionPattern=${pattern}
2.7、xml格式的配置文件

1、console打印





    
        
        
            
        
    
    
        
        
    

    
        
        
        
    

2、file输出到文件


    
    
    
        
    

2、rollingFile输出


    
    
    
    
    
        
    

3、dailyRollingFile输出


    
    
    
    
        
    

4、Filter
1、LevelMatchFilter



    
    

2、LevelRangeFilter



    
    

3、StringMatchFilter


     
    

3、JCL

jcl是定义的一组通用日志接口
log4j是日志的实现,log4j2也是日志的实现,log4j2对是对log4j的重写,功能更完善
1、JCL的介绍

image.png

通过LogFactory动态加载Log实现类,如果要适配新的日志,需要修改JCL内部代码,因此被apache淘汰

4、SLF4J

简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Java日志访问提供一套标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架

4.1、绑定日志的实现(Binding)

1、添加slf4j-api的依赖
2、使用slf4jAPI在项目中进行统一的日志记录
3、绑定具体的日志实现框架
4、绑定已经实现了slf4j的日志框架,直接添加对应依赖
5、绑定没有实现slf4j的日志框架,先添加日志的适配器,再添加实现类的依赖
6、slf4j有且仅有一个日志实现框架的绑定(如果出现多个默认使用第一个依赖日志实现)
maven中添加依赖


    log4j
    log4j
    1.2.12


    org.slf4j
    slf4j-api
    1.7.30


    org.slf4j
    slf4j-log4j12
    1.7.30

日志桥接如官方提供的图如下:


slf4j
4.2、旧的日志框架桥接

通常,依赖的某些组件依赖于SLF4J以外的日志记录API。也可以假设这些组件在不久的将来不会切换到SLF4J。为了解决这种情况,SLF4J附带了几个桥接模块,这些模块将对log4jJCLjava.util.logging API的调用重定向,就好像它们是对SLF4J API一样。
桥接步骤如下:
1、先去除之前老的日志框架的依赖
2、添加SLF4J提供的桥接组件
3、为项目添加SLF4J的具体实现

old-bridge

5、Lombok的使用

Lombok可以自动生成SLF4JLogger的定义
具体实现如下:
1、添加maven依赖如下


    org.projectlombok
    lombok
    1.18.12

2、在java中实现@CommonLog的注解

@CommonsLog
public class TestLog4j1 {
    public static void main(String[] args) {
// 实际使用中log的实现如下的形式,
// private static final Log log = LogFactory.getLog(TestLog4j1.class);
        log.error("错误_ERROR");
        log.warn("警告_WARN");
        log.info("信息_INFO");
        log.debug("调试_DEBUG");
        log.trace("痕迹_TRACE");
    }
}

6、Logback

Logback内部有一套默认配置,可以不用提供配置文件

6.1、Logback的打印实现

1、添加maven依赖如下


    ch.qos.logback
    logback-classic
    1.2.3

2、在resources中实现logback.xml配置文件




    
    

    
        
            ${CHARSET}
            ${PATTERN}
        
    

    
        
    
    
        
    

3、Logback彩色控制台打印


6.2、configuration标签

configuration设置常用属性,debug="true":可以打印Logback的内部日志
scan="true" + scanPeriod="30 seconds"
每隔30秒扫描配置文件,使用配置文件的最新修改
scanPeriod的单位可以是:millisecondssecondsminuteshours



6.3、appender标签

公共标签如下






1、FileAppender
PatternLayoutEncoder


    ${BASE_PATH}/logback_file.log
    
        ${CHARSET}
        ${FILE_PATTERN}
    

HTMLLayout


        ${BASE_PATH}/logback_file.html
        
            ${CHARSET}
            
                ${HTML_PATTERN}
            
        
    

2、RollingFileAppender
基于时间滚动策略TimeBasedRollingPolicy


    ${BASE_PATH}/logback.log
    
        ${CHARSET}
        ${FILE_PATTERN}
    

    
        ${BASE_PATH}/%d{yyy-MM-dd-HH-mm-ss}.log

        20

        10KB
    

基于时间和大小的滚动策略SizeAndTimeBasedRollingPolicy


    ${BASE_PATH}/logback_rolling2.log
    
        ${CHARSET}
        ${FILE_PATTERN}
    
    
    
        ${BASE_PATH}/logback_rolling2_%d{dd-HH-mm}_%i.log.zip
        
        1MB
    

3、Filter


    
        ${CHARSET}
        ${CONSOLE_PATTERN}
    

    
        WARN

        ACCEPT

        DENY
    

4、AsyncAppender异步打印


    

你可能感兴趣的:([java]55、SpringBoot日志处理)