一 log4j基本知识
1.1 log4j的日志级别
Log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从低到高依次为:All,trace,debug,info,warn,error,fatal,off。
当日志级别设置为某个值的时候,低于它的日志信息将不会被记录,只有高于设置的级别的信息会被记录。
【ALL】:最低等级的,用于打开所有日志记录。
【Trace】:很低日志级别,一般很少使用
【Debug】:debug级别的主要输出调试性质的内容,该级别日志主要用于在开发、测试阶段输出,该级别的日志应尽可能地详尽,便于在开发、测试阶段出现问题或者异常时,对齐进行分析。
【Info】:INFO日志主要记录系统关键信息,旨在保留系统正常工作期间关键运行指标,开发人员可以将初始化系统配置、业务状态变化信息,或者用户业务流程中的核心处理记录到INFO日志中,方便日常运维工作以及错误回溯时上下文场景复现。建议在项目完成后,在测试环境将日志级别调成 INFO,然后通过 INFO 级别的信息看看是否能了解这个应用的运用情况,如果出现问题后是否这些日志能否提供有用的排查问题的信息。
【warn】:warn级别的主要输出警告性质的内容,这些内容是可以预知且是有规划的,比如,某个方法入参为空或者该参数的值不满足运行该方法的条件时,在warn级别时应输出较为详尽的信息,以便于事后对日志进行分析。
【error】:error级别主要对于一些不可预知的信息,如,错误,异常等,比如,在catch快中捕获的网络通信,数据库连接等异常,如果异常对系统的整个流程影响不大,可以使用warn级别日志输出。在输出error级别的日志时,尽量多地输出方法入参数、方法执行过程中产生的对象等数据,在带有错误、异常对象的数据时,需要将该对象一并输出。
【fatal】:指出每个严重的错误事件,将会导致应用程序的退出,这个级别比较高了。重大错误,这种级别你可以直接停止程序了。【1】https://blog.csdn.net/wsskl/article/details/137580290
【OFF】:最高等级的,用于关闭所有日志记录。
1.2 log4j的日志文件结构*
1.2.1 概述
Log4j的日志文件主要结构:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。
1.properties: 定义一些变量,如日志格式,路径等。
2.Appenders:定义日志输出的目标位置,如控制台,文件等。
3.Loggers:定义日志记录器,控制日志的输出级别和目标。
4.filters:定义过滤条件,控制日志输出。
其中<configuration>标签的status属性用于设置log4j2自身jar里代码的日志输出级别。将status设置为debug可以获得更详细的内部日志输出,这对于调试和问题排查非常有帮助。
5.完整的结构
1.2.2 详解
Loggers(记录器):Loggers组件被分为7个级别,优先级从低到高:all、debug、info、warn、error、fatal、off。任何一个级别只输出本级别以及它级别以上的级别内容。
Appends(输出源):Log4j允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等。
Layout(布局):Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。
1根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个 Appender和Logger):
status用来指定log4j本身的打印日志的级别。
monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s
2.Appenders节点,常见的有三种子节点:Console、RollingFile、File:
1)Console节点用来定义输出到控制台的Appender
name:指定 Appender 的名字
target:SYSTEM_OUT 或SYSTEM_ERR,一般只设置默认:SYSTEM_OUT
PatternLayout:输出格式,不设置默认为%m%n
2)File节点用来定义输出到指定位置的文件的Appender
name:指定Appender的名字
fileName:指定输出日志的目的文件带全路径的文件名
PatternLayout:输出格式,不设置默认为%m%n
3)RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender
name:指定Appender的名字
fileName:指定输出日志的目的文件带全路径的文件名
PatternLayout:输出格式,不设置默认为%m%n
filePattern:指定新建日志文件的名称格式
Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志
TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am
SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size 属性用来定义每个日志文件的大小。
DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。
3.Loggers节点,常见的有两种Root和Logger:
1)root节点用来指定项目的根日志,如果没有单独指定 Logger,那么就会默认使用该 Root日志输出
level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF
AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender,子节点的ref属性也就是前面的RollingFile中指定的name名称,子节点的level也是日志输出级别。
2)logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。每个logger可以指定一个level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定时level默认为ERROR。
level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF
name:用来指定该 Logger所适用的类或者类所在的包全路径,继承自 Root节点.
AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自 Root。如果指定了,那么会在指定的这个Appender和 Root的Appender中都会输出,此时我们可以设置 Logger的 additivity="false"只在自定义的 Appender中进行输出。
案例配置:
1.3 log4j的日志格式化api
1.3.1 api详解