我也需要从Log4j2的PatternLayout中覆盖“ getHeader()”函数。 标头不仅是静态字符串,所以我不能只在配置中使用“标头”属性。我必须在运行时调用一个函数来获取状态信息并将其添加到标题中。
我已经尝试了一些扩展PatternLayout的示例,但没有成功。即使正式的log4j文档中的示例也不起作用。 在Logback上,扩展“ getHeader()”函数要容易得多,并且运行良好。
我在Patternlayout中也使用了查找和header属性进行了尝试,该方法通常可以正常工作,但它永远不会刷新滚动文件中的值。
答案 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();
}
}
别忘了在运行时读取“ $$”值。