Appender of Log4j [1]

本文档使用的Log4j版本为1.2.17

基本感官

Log4j Appender主要用来控制日志信息的输出目的地,这些目的地具体可以是标准输出(ConsoleAppender)、文件系统(FileAppender、DailyRollingFileAppender)、邮件(SMTPAppender)、操作系统日志守护进程(SyslogAppender)、Telnet监听(TelnetAppender)、远程套接字(SocketAppender)、数据库(JDBCAppender)等。除了上面log4j默认支持的Appender实现,用户还可以根据具体需要重写或添加自定义的日志输出实现。

Appender拥有对Layout、ErrorHandler、Filter等log4j核心模块的对象引用,相关实现调用流程一般为:

Continue Reading...

LoggingEvent of Log4j

LoggingEvent是log4j各个系统模块间数据交换的主要元素,其位于org.apache.log4j.spi包中。LoggingEvent是log4j对一次日志记录行为的抽象,在使用日志记录器Logger调用相应info、warn、error等方法时,log4j都会相应创建一个LoggingEvent的实例。

1. 基本感官

LoggingEvent主要成员属性有:

Continue Reading...

Filter&ErrorHandler of Log4j

1. Filter

org.apache.log4j.Category、以及log4j继承自org.apache.log4j.AppenderSkeleton的Appender都提供了日志过滤Filter功能,即根据一定的规则对LoggingEvent进行过滤,只有满足规则条件的LoggingEvent才会输出到Appender中。Filter抽象类实现了OptionHandler接口,但一般过滤器没有具体的配置激活需求,故activateOptions方法体为空。log4j建议在实现自定义过滤器前理解log4j内置提供的过滤器即:DenyAllFilter、LevelMatchFilter、LevelRangeFilter、StringMatchFilter。

1.1 Filter接口

Filter关键接口签名为:

abstract public int decide(LoggingEvent event);

多个Filter通过其next属性关联起来,构成数据结构中常见的单向链表结构。Appender在进行日志过滤处理时,根据Filter添加顺序依次调用对应的decide(LoggingEvent)方法。decide方法会返回DENY(-1)、NEUTRAL(0)、ACCEPT(1)中的一个,这几个数字是Filter类中的静态常量。log4j的涉及模式借鉴了Linux ipchains设计思想。

在循环执行所有Filter的decide(LoggingEvent)方法时,如果过滤器返回:

Continue Reading...

PatternCoverter of Log4j

在log4j Layout部分,介绍了PatternLayout原理,具体使用org.apache.log4j.helpers包下的PatternParser、PatternConverter完成模式解析、格式转换、样式控制等过程。详细解析过程可见Layout:PatternLayout相关的介绍。

阅读代码发现在org.apache.log4j.pattern包下面,还有一套PatternParser、PatternCoverter,其具体实现逻辑和org.apache.log4j.helpers包下相对一致,但是抽象化、模块化更好一些。为什么2个地方都有PatternCoverter以及PatternParser呢?

[caption id="attachment_135" align="aligncenter" width="476"]PatternConverter org.apache.log4j.helpers.PatternConverter[/caption]

1. PatternConverter

org.apache.log4j.pattern.PatternConverter是一个抽象类,描述了模式转换相关的接口。有属性和函数:

Continue Reading...

你的Wikipedia中文打开不了?

你的Wikipedia中文打开不了?不能在其中畅游深度优先遍历?科普小达人的你可以尝试添加绑定下面的hosts(其实是自己做备份啦)

linux&mac: /etc/hosts windows: C:\Windows\System32\drivers\etc\hosts

对其他语言如果没有有太多的追求,下面这些应该就够了:

# Wikipedia Start
208.80.154.224 zh-classical.wikipedia.org
208.80.154.224 zh-min-nan.wikipedia.org
208.80.154.224 zh-yue.wikipedia.org
208.80.154.224 zh.wikipedia.org
198.35.26.108 zh.m.wikipedia.org
91.198.174.192 zh.wikibooks.org
91.198.174.192 zh.wikinews.org
91.198.174.192 zh.wikiquote.org
91.198.174.192 zh.wiktionary.org
91.198.174.192 zh.wikisource.org
# Wikipedia End

这是一份全量版:

Continue Reading...