为log4j2中的自定义标头扩展PatternLayout

时间:2019-04-25 11:40:33

标签: log4j2

我也需要从Log4j2的PatternLayout中覆盖“ getHeader()”函数。 标头不仅是静态字符串,所以我不能只在配置中使用“标头”属性。我必须在运行时调用一个函数来获取状态信息并将其添加到标题中。

我已经尝试了一些扩展PatternLayout的示例,但没有成功。即使正式的log4j文档中的示例也不起作用。 在Logback上,扩展“ getHeader()”函数要容易得多,并且运行良好。

我在Patternlayout中也使用了查找和header属性进行了尝试,该方法通常可以正常工作,但它永远不会刷新滚动文件中的值。

1 个答案:

答案 0 :(得分:0)

我现在可以通过查找解决它: log4j2.yml:

PatternLayout:
      Pattern: "%date{yyyy-MM-dd HH:mm:ss.SSS}{UTC}; %msg; %level; %logger; %class; %method; %thread; [%file:%line]%n"
      Header: $${headerlookup:header}

查找插件:

@Plugin(name = "headerlookup", category = StrLookup.CATEGORY )
public class IONLog4j2HeaderLookup extends AbstractLookup {

/**
 * Lookup the value for the key using the data in the LogEvent.
 * @param event The current LogEvent.
 * @param key  the key to be looked up, may be null
 * @return The value associated with the key.
 */
@Override
public String lookup(final LogEvent event, final String key) {
    return new IONLogLayout().getFileHeader();
}

}

别忘了在运行时读取“ $$”值。