如本链接所述:How to create a own Appender in log4j?
为了在log4j 1.x中创建一个自定义的appender,我们必须扩展AppenderSkeleton类并实现它的append方法。
类似地,我们如何在log4j2中创建一个自定义的附加器,因为我们没有要扩展的AppenderSkelton类,而所有其他的附加器都扩展了AppenderBase类。
如本链接所述:How to create a own Appender in log4j?
为了在log4j 1.x中创建一个自定义的appender,我们必须扩展AppenderSkeleton类并实现它的append方法。
类似地,我们如何在log4j2中创建一个自定义的附加器,因为我们没有要扩展的AppenderSkelton类,而所有其他的附加器都扩展了AppenderBase类。
3条答案
按热度按时间2guxujil1#
这在log4j 2中的工作方式与在log4j-1.2中完全不同。
在log4j 2中,你可以创建一个插件,手册中有一个自定义附加器的例子:http://logging.apache.org/log4j/2.x/manual/extending.html#Appenders
扩展
org.apache.logging.log4j.core.appender.AbstractAppender
可能会很方便,但这不是必需的。当您使用
@Plugin(name="MyCustomAppender", ....
注解自定义Appender类时,插件名称将成为配置元素名称,因此具有自定义Appender的配置将如下所示:请注意,配置上的
packages
属性是一个逗号分隔的列表,其中包含所有带有自定义log4j 2插件的包。Log4j 2将在类路径中搜索这些包,以查找带有@Plugin注解的类。下面是一个打印到控制台的自定义附加器示例:
有关插件的更多详细信息:http://logging.apache.org/log4j/2.x/manual/plugins.html
如果手册还不够,那么查看log4j-core中内置的appender的源代码可能会很有用。
os8fio9y2#
正如您所指出的,AppenderSkeleton不再可用,因此How to create my own Appender in log4j?中的解决方案将不起作用。
如果您需要多个日志消息,则使用Mockito或类似库创建带有ArgumentCaptor的Appender将不起作用,因为MutableLogEvent将在多个日志消息中重用。
我为log4j2找到的最通用的解决方案是提供一个记录所有消息的mock实现,它不需要任何额外的库,如Mockito或JMockit。
wsxa1bj13#
看起来插件附加器在启动时被扫描,不能在运行时添加。是真的吗?
要在运行时添加新的附加器,您可以使用monitorInterval属性更新日志配置,即每60秒更新一次: