• log4j2


    简介

    log4j2是一个由Java编写可靠、灵活的日志框架,是Apache旗下的一个开源项目;我们更加方便的记录了日志信息,它不但能控制日志输出的目的地,也能控制日志输出的内容格式;通过定义不同的日志级别,可以更加精确的控制日志的生成过程,从而达到我们应用的需求;这一切,都得益于一个灵活的配置文件,并不需要我们更改代码。

    集成log4j2

    因为springboot默认使用的日志框架为logback,所以要排除

            
                org.springframework.boot
                spring-boot-starter
                
                    
                    
                        org.springframework.boot
                        spring-boot-starter-logging
                    
                
            
            
                org.springframework.boot
                spring-boot-starter-log4j2
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在application.yml中增加log配置

    logging:
      config: classpath:log4j2-dev.xml
    
    • 1
    • 2

    然后在resources目录中创建一个log4j.properties或者log4j.xml文件。

    日志级别

    一般日志级别包括:ALL,DEBUG, INFO, WARN, ERROR,FATAL,OFF
    Log4J推荐使用:DEBUG, INFO, WARN, ERROR

    OFF :最高等级 关闭了日志信息
    FATAL :可能导致应用中止的严重事件错误
    ERROR :严重错误 主要是程序的错误
    WARN :一般警告,比如session丢失
    INFO :一般要显示的信息,比如登录登出
    DEBUG :程序的调试信息
    TRACE :比DEBUG更细粒度的事件信息
    ALL :最低等级,将打开所有级别的日志

    日志优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL

    log4j重要组件

    log4j日志主要的三个组件是:Appenders(输出源)、Loggers(记录器)和Layouts(布局);

    1、Properties

    Properties(属性):主要是声明日志配置中需要使用到的变量;
    一般使用到的Properties有

    
    	./logs
    	
        [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%c.%M] [%L] [%X{X-B3-TraceId:-}] [%X{X-B3-SpanId:-}]:
        %m%n
    
    	500MB
    	720H
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    2、Appenders

    Appenders:日志输出目的地,负责把格式好的日志信息输出到指定地方,可以是控制台、磁盘文件等;

    org.apache.log4j.ConsoleAppender:控制台
    org.apache.log4j.FileAppender:文件
    org.apache.log4j.DailyRollingFileAppender:每天产生一个日志文件
    org.apache.log4j.RollingFileAppender:文件大小到达指定尺寸的时候产生一个新的文件
    org.apache.log4j.WriterAppender:将日志信息以流格式发送到任意指定的地方
    
    • 1
    • 2
    • 3
    • 4
    • 5
    2、Layouts

    Layouts:日志格式化器,负责显示不同风格的日志信息。

    org.apache.log4j.HTMLLayout:以HTML表格形式布局
    org.apache.log4j.PatternLayout:可以灵活地指定布局模式
    org.apache.log4j.SimpleLayout:包含日志信息的级别和信息字符串
    org.apache.log4j.TTCCLayout:包含日志产生的时间、线程、类别等信息
    
    • 1
    • 2
    • 3
    • 4
    3、Loggers

    Loggers:日志对象,负责捕捉日志记录信息;
    Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。
    日志重要程度:DEBUG < INFO < WARN < ERROR < FATAL,Log4j只输出级别不低于设定级别的日志信息。(如Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。)

    配置详解

    PatternLayout

    PatternLayout:可以灵活地指定日志的格式和布局;

    [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] [%c.%M] [%L] [%X{X-B3-TraceId:-}] [%X{X-B3-SpanId:-}]: %m%n 
    
    • 1

    %p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
    %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
    %r:输出自应用程序启动到输出该log信息耗费的毫秒数。
    %t:输出产生该日志事件的线程名。
    %l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
    %c:输出日志信息所属的类目,通常就是所在类的全名。
    %M:输出产生日志信息的方法名。
    %F:输出日志消息产生时所在的文件名称。
    %L::输出代码中的行号。
    %m::输出代码中指定的具体日志信息。
    %n:输出一个回车换行符,Windows平台为”rn”,Unix平台为”n”。
    %x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
    %%:输出一个”%”字符。
    %thread:表示线程名
    %level:日志级别
    另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:

    1. c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
      2)%-20c:”-“号表示左对齐。
      3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。
    Console

    Console:控制台日志输出,是在Appenders中的ConsoleAppender;

    
            
                
                
            
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ThresholdFilter :控制接收的日志级别,指定最低日志级别限制并设置匹配处理策略和不匹配处理策略
    level:指定支持的最低日志级别限制;
    onMatch:指定匹配的策略ACCEPT(接收);
    onMismatch:指定不匹配策略DENY(拒绝);

    RollingFile

    RollingFile:文件大小到达指定尺寸的时候产生一个新的文件

    
        
        
        
            
            
        
        
            
                
                
                
                    
                    
                  
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    fileName:指定文件名称
    filePattern:指定文件达到指定尺寸后产生新文件的名称
    TimeBasedTriggeringPolicy—interval:时间触发策略,根据设置的时间来决定多久生成一个新文件;
    TimeBasedTriggeringPolicy—modulate:时间间隔内没有日志是否生成文件;
    SizeBasedTriggeringPolicy—size:文件大小策略,根据设置的大小来决定多久生成一个新文件;
    DefaultRolloverStrategy:默认滚动策略
    DefaultRolloverStrategy—max:保存日志文件的最大个数,默认是7,大于此值会删除旧的日志文件;
    DefaultRolloverStrategy—Delete:删除策略
    maxDepth:指定了目录扫描深度,0表示filePath指定的文件自身,(默认)1表示扫描filePath文件夹,2表示扫描filePath文件夹及其子文件夹,Integer.MAX_VALUE表示扫描所有的目录层。

    max

    1、max参数是与filePattern中的计数器%i配合起作用的,若filePattern为filePattern=“logs/app-%d{yyyy-MM-dd}.log”>,由于没有设置%i计数器,max参数将不起作用。
    2、max参数不是需要保留的文件的最大个数。如日志文件date/time pattern不再符合filePattern时,计算器将被重置为1,日志总个数超过了max的指定值。
    可认为max参数规定了一定时间范围内归档文件的最大个数。

    Root

    Root:根logger输出器(默认使用),指定logger的日志级别;
    logger :用于单独指定日志的形式,name为指定包下的class类,level:指定日志级别。

    
        
            
            
            
            
            
        
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    AppenderRef:Root的子节点,用来指定该日志输出那个Appender,通过ref指定

  • 相关阅读:
    快速掌握Gulp自动化构建工具
    基于Java+SpringBoot+Vue前后端分离周边游平台设计和实现
    linux C++ vscode连接mysql
    NVIDIA Jetson TX2 解决奥比中光 Astra pro相机的ros 打不开深度信息/camera/depth/image
    Java基于微信小程序的电影交流平台
    STM32之Bootloader、USB、IAP/DFU下载
    利用百度AI接口实现车牌识别功能(三)
    Nginx - 反向代理与负载均衡
    c++ std::variant用法
    详解欧拉计划第199题:迭代放圆
  • 原文地址:https://blog.csdn.net/u010833154/article/details/126974062