java日志log4j1.x 基础

日志级别

TRACE

比debug粒度更细

DEBUG

允许输出调试应用程序的信息

INFO

粗粒度级别突出应用程序进度的信息

WARN

输出程序潜在有害的信息

ERROR

遇到并输出错误信息,但仍然允许应用程序继续运行

FATAL

可能导致程序中止的非常严重的错误信息

OFF

级别最高,关闭日志记录

ALL

最低级别,打开所有日志记录

优先级

日志级别从低到高顺序为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL
常用级别为DEBUG,INFO,WARN,ERROR

常用配置

配置文件位置

放在程序classpath路径下即可。
例如maven项目放在src/main/java/log4j.properties

输出到控制台

log4j.rootLogger=INFO,console
#console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %c{2} - %m%n

log4j输出

配置文件解读

1、声明根日志记录器,这个是必须的

log4j.rootLogger=INFO,console
声明根记录器,定义程序输出的所有日志级别最低INFO级别(级别不低于 INFO 的所有日志都可以输出),输出日志目的地名字叫做console,这个名字可以随便写。

2、设置记录器将日志输出到哪里

log4j.appender.console=org.apache.log4j.ConsoleAppender
设置日志输出目的地 console 是一个控制台。

3、设置记录器以什么格式输出日志

log4j.appender.console.layout=org.apache.log4j.PatternLayout
设置目的地console日志输出格式,是简配版的还是豪华版的,或者是自定义格式。这里设置的是自定义格式。

4、设置记录器输出格式

log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %c{2} - %m%n
自定义的日志输出格式。
例如:
%d{yyyy-MM-dd HH:mm:ss} [%p] %c{2} - %m%n
输出的格式为:
2022-01-06 10:40:49 [INFO] log4j.TestLog4j - i=4
%d 表示输出时间,后面将日志格式化指定的形式输出。
%p 表示输出日志级别。
%c 表示输出类的完整包路径,{2}表示只显示包括类名的最后两级信息。
- 没有任何含义,只是一个输出字符串而已,为了好看。
%m 表示程序要输出的内容
%n 表示换行,Linux和Windows的换行符不同,这个会自动识别。

输出到文件

log4j.rootLogger=INFO,console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] %c{2} - %m%n

log4j.logger.test.log4j.Test1 = DEBUG, file
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %c{2} - %m%n
log4j.appender.file.file = fileLog.log
log4j.appender.file.datePattern = '.'yyyy-MM-dd-HH-mm

日志输出

配置文件解读

1、声明子日志记录器,可选

log4j.logger.test.log4j.Test1 = DEBUG, file
声明日志记录器test.log4j.Test1 ,日志级别定义为DEBUG,日志输出到一个名字叫做file的地方。

2、设置日志记录器将日志输出到哪里

log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
设置名字叫做file的地方是一个循环写入文件。

3、设置日志记录器以什么格式输出日志

log4j.appender.file.layout = org.apache.log4j.PatternLayout
设置名字叫做file的地方采用自定义输出格式。

4、设置具体的自定义输出格式

log4j.appender.file.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %c{2} - %m%n
输出格式为:
2022-01-06 14:50:47 [DEBUG] log4j.Test1 - **** test1 DEBUG ****

5、设置具体日志文件名

log4j.appender.file.file = fileLog.log
设置输出的日志文件名(包含路径)。

6、设置以什么命名规律作为循环日志的文件名称

log4j.appender.file.datePattern = '.'yyyy-MM-dd-HH-mm
表示每分钟产生一个日志文件。
当前分钟日志写入到fileLog.log中
下一分钟时,将fileLog.log按设置的命名规律重命名。
例如当前时间是2022-01-06 14:50:47,那么当前日志是写入在fileLog.log中,当时间到2022-01-06 14:51:00时,会将之前的fileLog.log重命名为fileLog.log.2022-01-06-14-50,并重新生成一个新的fileLog.log继续记录当前时间的日志。

日志继承问题

在输出到文件使用了log4j.logger.test.log4j.Test1 = DEBUG, file表示子记录器test.log4j.Test1将日志输出到file中,但是实际上不仅仅只输出到file,同时也输出到console中了。
log4j日志继承
这是因为所有的子记录器都默认继承了根记录器的输出。所以即使子记录器只设置了输出到file,也会同时输出一份相同内容到console
子记录器虽然继承了根记录器的输出设置,但是子记录器同样可以覆盖根记录器,在这里根记录器rootLogger设置的日志记录级别是INFO,而子记录器test.log4j.Test1设置的日志记录级别为DEBUG,覆盖了根记录器的日志级别,所以在fileconsole中输出的最低日志级别为DEBUG

由于没有对test.log4j.Test2设置子记录器,所以采用根记录器输出日志,将日志内容输出到console控制台,并没有将日志输出到file中。

取消继承

有时我们只想将日志分开存放,并不想将重复的日志内容重复输出。
子记录器test.log4j.Test1输出到file的日志内容,就不要再重复的输出到根记录器console中了。
可以通过设置子记录器test.log4j.Test1addivitity属性为false来取消继承。
file的配置改为

log4j.logger.test.log4j.Test1 = DEBUG, file
log4j.additivity.test.log4j.Test1 = false
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %c{2} - %m%n log4j.appender.file.file = fileLog.log
log4j.appender.file.datePattern = '.'yyyy-MM-dd-HH-mm

取消log4j继承
这样子记录器test.log4j.Test1的内容只输出到file中,没有重复输出到consoletest.log4j.Test2由于没有设置子记录器,所以使用根记录器输出到console中。

抽取高级别日志

子记录器test.log4j.Test1覆盖了根记录器的日志记录级别,输出了很多的信息。我想从里面抽取出ERROR级别以上的日志内容单独作为一个日志文件fileLogError.log。既不影响原来的fileLog.log,又可以直观的查看错误日志内容。

修改子记录器test.log4j.Test1的配置

log4j.logger.test.log4j.Test1 = DEBUG, file, file2
log4j.additivity.test.log4j.Test1 = false
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %c{2} - %m%n
log4j.appender.file.file = fileLog.log
log4j.appender.file.datePattern = '.'yyyy-MM-dd-HH-mm
#

log4j.appender.file2 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file2.threshold = ERROR
log4j.appender.file2.layout = org.apache.log4j.PatternLayout
log4j.appender.file2.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %c{2} - %m%n
log4j.appender.file2.file = fileLogError.log
log4j.appender.file2.datePattern = '.'yyyy-MM-dd-HH-mm

添加了目的地file2,配置和file相同。file2添加了threshold属性配置为ERROR,表示只有日志级别不低于ERROR的日志内容才会输出,这样就达到了抽取高级别日志的目的。
log4j抽取高级别日志
以上内容编辑于 2022-01-06

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值