Layout of Log4j part3

本文档使用Log4j版本为1.2.17

Layout of Log4j

Layout of Log4j part2

1. PatternLayout

1.1 PatternLayout demo

PatternLayout的目的是根据提供的转换conversion pattern序列化LoggingEvent,log4j推荐使用更新的EnhancedPatternLayout替代PatternLayout。conversion pattern的转换格式同C语言printf格式串较为接近。TTCCLayout对应到PatternLayout的模式字符串为%r [%t] %p %c %x - %m%n

  • conversion pattern每一个转换描述符都以%字符开始,后跟可选的格式描述符和转换字符。转换字符具体有目录category、日志级别priority、时间date、线程名等。
  • 格式描述符具体的控制格式化后的字符串的宽度、内边距padding、左右对齐等。
  • 在conversion pattern中可以自由插入其它非格式字面值,即字符串常量。
  • 非格式字面值和格式化控制字符之间没有明确分割符号,PatternLayout能够自己正确解析conversion pattern和常量字符串字面值。

举例子有一个直观印象,conversion pattern为%5p [%t]: %m%n其中:

Continue Reading...

Layout of Log4j part2

本文档使用Log4j版本为1.2.17

Layout of Log4j

Layout of Log4j part3

1. DateLayout

DateLayout仍然是一个抽象类,在Layout抽象类的基础上增加了时间相关的序列化功能,没有具体实现format的逻辑。TTCCLayout是DateLayout的具体实现子类。DateLayout主要属性有:
timeZoneID表示时区偏移量,支持计算夏令时。比如可缩写(CST中国标准时间),自定义timeZoneID如GMT +8:00,时区全名等,在log4j配置文件中配置项名为TimeZone
dateFormatOption支持"NULL", "RELATIVE", "ABSOLUTE", "DATE" 或者 “ISO8601等log4j内置时间序列化格式。也支持配置自定义的SimpleDateFormat格式串,在log4j配置文件中配置项名为DateFormat
"NULL", "RELATIVE", "ABSOLUTE", "DATE" 或者 “ISO8601等几个DateFormat具体实现有(org.apache.log4j.helpers):

org.apache.log4j.helpers.AbsoluteTimeDateFormat
org.apache.log4j.helpers.DateTimeDateFormat
org.apache.log4j.helpers.ISO8601DateFormat
org.apache.log4j.helpers.RelativeTimeDateFormat

Continue Reading...

Layout of Log4j

本文档使用Log4j版本为1.2.17

Layout of Log4j part2

Layout of Log4j part3

1. Layout介绍

Log4j Layout主要用来控制日志的序列化格式,比如时间、线程号、日志消息对齐方式等,是log4j体系结构中的核心组成部分之一。

Layout抽象类声明为:

public abstract class Layout implements OptionHandler

Layout实现了OptionHandler接口,OptionHandler仅包含一个方法activateOptions()。对实现了OptionHandler接口的模块,调用属性setter方法后,log4j的配置器类会调用此模块的activateOptions实现以激活配置。OptionHandler存在的原因是有些属性彼此依赖,在它们在全部加载完成之前是无法激活的,这个方法用于在模块变为激活和就绪之前用来执行任何必要任务的机制。比如:

某模块有字符串属性fileName属性,表示log4j用户配置的写出日志文件名,使用前需要创建File对象获取文件写出IO流具体则是由activateOptions完成文件的打开等,具体见log4j的FileAppender实现中对文件名和文件IO的操作。

Layout类的方法或接口如下,abstract修饰的需要具体子类实现:

Continue Reading...