Appender的自定义其实很简单,可以参考log4j-core源码中org.apache.logging.log4j.core.appender.mom包中其它的扩展appender的实现。主要是实现AbstractAppender和AbstractManager。
编码完后,在log4j2.xml中添加自定义的appender后运行会发现:
2016-08-02 22:46:30,693 main ERROR Error processing element XXX ([Appenders: null]): CLASS_NOT_FOUND这是由于log4j2没有加载自定义的类而抛出异常。可以在log4j2.xml中加上
<Configuration status="info" packages="com.zero.scribe.log4j2plugin">这里的packages是自定义的Appender类所在包的包名,这会告诉log4j2去加载这个包下的类,而不会抛出CLASS_NOT_FOUND异常。
倘若不想多加packages这个字段,则需要预先build一下project,我使用的是gradle构建项目,运行gradle build后在classes中会额外生成META-INF,META-INF中会有org.apache.logging.log4j.core.config.plugins目录,目录会有Log4j2Plugins.dat,该二进制文件则会告诉log4j2需要加载自定义的Appender类。