log4j2过滤器修改日志事件?

时间:2015-09-28 09:15:51

标签: log4j2

我有一个抑制重复消息的过滤器,如果在z秒内在y秒内看到的消息超过x次。使用log4j,一旦达到阈值,我就会将事件范围的MDC属性放入其中,例如:

event.setProperty( "prefix", suppressProlog );

在我的布局中,我使用了这种模式:

<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS z}] %p %t %c %X{prefix} %m%n" />

由于此属性仅限于当前事件,我不必担心清理。 使用log4j2,事件链接属性似乎消失了。我如何实现与log4j相同的行为?

以下是我认为可能的解决方案,但没有一个对我很有吸引力:

  • 我可以保留自己的ThreadLocal属性并在记录后清理它,但是当它通过另一个Thread中的异步记录器进行记录时,或者我怎么知道可以清除它?并且将抑制逻辑拆分为Filter和Layout似乎是错误的
  • 阅读这个答案https://stackoverflow.com/a/29597669/1377224,似乎也不鼓励继承LogEvent,因此扩展LogEvent以提供一些抑制标志是行不通的。我这次也试图远离黑客入侵log4j。
  • 过滤器可以自己记录一条消息,告知消息x将被抑制。将插件日志消息与标准记录器而不是StatusLogger一起使用是不错的做法?

具有过滤器影响的预期模式是什么?日志输出?

1 个答案:

答案 0 :(得分:0)

LoggerEvent的源代码显示,在getProperty和setProperty方法的引擎下,它使用MDC来存储和获取属性。

新类LogEvent具有 映射getContextMap()

这是我的POV的替代品。