log4j入门
程序员文章站
2022-04-26 14:06:44
...
这里仅介绍配置文件的思想顺序方便理解,具体配置网上会有很多,不在此过多介绍
首先,需要了解log4j的几个预定义级别
debug < info < warn < error < fatal
分别可以控制想要的不同级别的输出规则
---------------------------------------------------------------------------
log4j里面有两个核心的概念,一个是appender、一个是logger,这里,我们需要先要有一个计划,就是把日志想要输出到什么位置、以什么样的形式。
---------------------------------------------------------------------------
所以,我们先来看appender
他的作用是我们来配置日志需要输出到什么位置,以什么样的格式输出
Appender分别提供了如下几种
# org.apache.log4j.ConsoleAppender(控制台),
#org.apache.log4j.FileAppender(文件),
#org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
#org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
#org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
比如如下代码
第一行就是我们选择用哪一种输出形式
第二行就是输出文件的位置目录
第三行是这种输出需要过滤的日志级别,也就是低于这个级别的都在这里被忽略,稍后详细写
第四行是输出格式的选择,基本提供了如下等
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
第五行就是具体输出的格式了,因为第四行选择了自定义的布局,第五行使用匹配的表达式来输出。
这样输出的形式基本就配置完了,我们还可以选择其他的形式输出,根据自己的需求。
---------------------------------------------------------------------------
下面就是Logger了,我们要针对于不同的需求和代码,输出到不同的Appender中,上面我们已经设置好Appender,在Logger中配置对应的输出即可。
---------------------------------------------------------------------------
我们先来看rootLogger
也就是整个log的根
代码如下
log4j.rootLogger = debug , DEBUG , CONSOLE , INFO , ERROR
这里面其实要分为两部分,第一部分,就是等号后面的第一个参数,就是我们之前说到的5种日志级别,我们在这里面配置我们所有的日志的最低级别是什么,比如是error,那么所有error级别以下的日志,都不会被记录,我们这里配置的是debug。
后面的几个参数就是不同的Appender。
意思就是,所有高于debug级别的日志,会分别向后面4个日志输出方式进行输出
---------------------------------------------------------------------------
然后我们在看Logger
我们配置的所有Logger其实都相当于是继承rootLogger的配置,如果我们不单独配置,则使用rootLogger,如果我们配置的级别比rootLogger高,则会在相应自己的配置上使用这个规则,举例说明
log4j.logger.com.ibatis = info
这句配置的意思就是,在com.ibatis包下所输出的日志,只有info级以上的,会分别输出到rootLogger配置的4个日志输出方式中输出
再举例
log4j.logger.com.ibatis = info, DEBUG
这句话的意思和上句其实级别是一样的,不过,他会在DEBUG这个Appender中输出两次日志,也就是,这里面的Logger,是属于包含的关系,rootLogger属于覆盖整个包的范围之内,而com.ibatis包下有自己的日志触发,所以两个都会捕捉到并进行处理,如果说我们又配置了一个
log4j.logger.com = info, DEBUG的话,一次执行日志输出,DEBUG中就会被输出三次,因为有三个地方在捕捉
所以这个地方我们一定要注意,否则日志输出很多次,看起来可能影响阅读和理解。
如果我们想在Logger只用自己的,而不再继承rootLogger,则用如下写法
log4j.additivity.com.ibatis=false
也就是设置additivity,这样就只会按照自己的级别规则进行输出了,也就是仅输出一次。
---------------------------------------------------------------------------
思想流程就是这些,具体的配置还需要看文档
首先,需要了解log4j的几个预定义级别
debug < info < warn < error < fatal
分别可以控制想要的不同级别的输出规则
---------------------------------------------------------------------------
log4j里面有两个核心的概念,一个是appender、一个是logger,这里,我们需要先要有一个计划,就是把日志想要输出到什么位置、以什么样的形式。
---------------------------------------------------------------------------
所以,我们先来看appender
他的作用是我们来配置日志需要输出到什么位置,以什么样的格式输出
Appender分别提供了如下几种
# org.apache.log4j.ConsoleAppender(控制台),
#org.apache.log4j.FileAppender(文件),
#org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
#org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
#org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
比如如下代码
log4j.appender.INFO = org.apache.log4j.DailyRollingFileAppender log4j.appender.INFO.File = /Volumes/Data/javaLog/info.log log4j.appender.INFO.Threshold = info log4j.appender.INFO.layout = org.apache.log4j.PatternLayout log4j.appender.INFO.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%-5p] %x [ %t:%r ] - %m%n
第一行就是我们选择用哪一种输出形式
第二行就是输出文件的位置目录
第三行是这种输出需要过滤的日志级别,也就是低于这个级别的都在这里被忽略,稍后详细写
第四行是输出格式的选择,基本提供了如下等
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
第五行就是具体输出的格式了,因为第四行选择了自定义的布局,第五行使用匹配的表达式来输出。
这样输出的形式基本就配置完了,我们还可以选择其他的形式输出,根据自己的需求。
---------------------------------------------------------------------------
下面就是Logger了,我们要针对于不同的需求和代码,输出到不同的Appender中,上面我们已经设置好Appender,在Logger中配置对应的输出即可。
---------------------------------------------------------------------------
我们先来看rootLogger
也就是整个log的根
代码如下
log4j.rootLogger = debug , DEBUG , CONSOLE , INFO , ERROR
这里面其实要分为两部分,第一部分,就是等号后面的第一个参数,就是我们之前说到的5种日志级别,我们在这里面配置我们所有的日志的最低级别是什么,比如是error,那么所有error级别以下的日志,都不会被记录,我们这里配置的是debug。
后面的几个参数就是不同的Appender。
意思就是,所有高于debug级别的日志,会分别向后面4个日志输出方式进行输出
---------------------------------------------------------------------------
然后我们在看Logger
我们配置的所有Logger其实都相当于是继承rootLogger的配置,如果我们不单独配置,则使用rootLogger,如果我们配置的级别比rootLogger高,则会在相应自己的配置上使用这个规则,举例说明
log4j.logger.com.ibatis = info
这句配置的意思就是,在com.ibatis包下所输出的日志,只有info级以上的,会分别输出到rootLogger配置的4个日志输出方式中输出
再举例
log4j.logger.com.ibatis = info, DEBUG
这句话的意思和上句其实级别是一样的,不过,他会在DEBUG这个Appender中输出两次日志,也就是,这里面的Logger,是属于包含的关系,rootLogger属于覆盖整个包的范围之内,而com.ibatis包下有自己的日志触发,所以两个都会捕捉到并进行处理,如果说我们又配置了一个
log4j.logger.com = info, DEBUG的话,一次执行日志输出,DEBUG中就会被输出三次,因为有三个地方在捕捉
所以这个地方我们一定要注意,否则日志输出很多次,看起来可能影响阅读和理解。
如果我们想在Logger只用自己的,而不再继承rootLogger,则用如下写法
log4j.additivity.com.ibatis=false
也就是设置additivity,这样就只会按照自己的级别规则进行输出了,也就是仅输出一次。
---------------------------------------------------------------------------
思想流程就是这些,具体的配置还需要看文档