Log4J介绍(Logger、Level、Appender、Layout)

介绍

Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。

官方网址: http://logging.apache.org/log4j/1.2/

注意:log4j已经 很久没有更新了log4j2 替代了 log4j

三大组件

  • Logger:日志记录器,负责收集处理日志记录 (如何处理日志)

  • Appender:日志输出目的地,负责日志的输出 (输出到什么 地方)

  • Layout:日志格式化,负责对输出的日志格式化(以什么形式展现)

三者关系: 一个 Logger 可以对应多个 Appender,一个 Appender 只能对应一个 Layout

Logger

logger可以有选择的启动和禁用日志的输出,我们经常会在各种框架中看到如:

private static final Logger log = LoggerFactory.getLogger(XX.class);

log就代表了一个Logger实例,他的name就是类“XX”的full quailied name(类的全限定名),这个log就可以指定多个appender和layout。Logger的名字大小写敏感,其命名有继承机制:例如:name为org.apache.commons的logger会继承name为org.apache的logger。

Log4J中有一个特殊的logger叫做“root”,他是所有logger的根,也就意味着其他所有的logger都会直接或者间接地继承自root。

Level

https://www.malaoshi.top/show_1IX2JNRVMqe6.html

Appender

Appender可以控制日志的输出的目的地,一个输出源就叫一个Appender,appender的类别有:

  • Console(控制台)
  • File(文件)
  • JDBC、JMS等等

logger可以通过配置文件指定

常用的appender有:

  • org.apache.log4j.ConsoleAppender(控制台)

  • org.apache.log4j.FileAppender(文件)

  • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

  • org.apache.log4j.RollingFileAppender((文件大小到达指定尺寸的时候产生一个新的文件)

  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

Layout

使用指定的Layout来展示(格式化)日志,常见的Layout有:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局)

  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息),更多

配置

log4j的配置文件名称为:log4j.properties

配置 root Logger

log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …

解释: appenderName1 自定义名字

例子:
log4j.rootLogger = DEBUG , stdout ,file

配置日志信息输出目的地(Appender)

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

解释: stdoutlog4j.rootLogger 自定义的名字

配置日志信息的格式(Layout)

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

例子

输出到控制台

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target = System.out #默认就是System.out,另外一个值是System.error

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

输出到文件

log4j.appender.file = org.apache.log4j.DailyRollingFileAppender

log4j.appender.file.File = logs/log.log

log4j.appender.file.Append = true #默认就是true,系统启动时追加至文件中,否则会覆盖原有内容

log4j.appender.file.Threshold = INFO ## 输出IFNO级别以上的日志,这里的意思是rootLogger设置为DEBUG时,只输出INFO以上(INFO、WARN、ERROR、FATAL)的信息到文件中去,而DEBUG信息就不会输出了

log4j.appender.file.layout = org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

配置日志信息的格式(Layout)

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1

…

log4j.appender.appenderName.layout.optionN = valueN

例子

log4j.appender.file.layout = org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

ConversionPattern参数

https://www.malaoshi.top/show_1IX2T16HSwpf.html


原文出处:https://malaoshi.top/show_1IX2T1GIXNEs.html