log4j2 - 在 log4j2 中为自定义 Header 扩展 PatternLayout
问题描述
我也需要覆盖 Log4j2 的 PatternLayout 中的“getHeader()”函数。标头不仅仅是一个静态字符串,所以我不能只在配置中使用“标头”属性。我必须在运行时调用一个函数来获取状态信息并将它们添加到标题中。
我已经尝试了一些扩展 PatternLayout 的示例,但没有成功。甚至官方 log4j 文档中的示例也不起作用。在 Logback 上,扩展“getHeader()”函数要容易得多,而且运行良好。
我也在 Patternlayout 中使用查找和 header 属性进行了尝试,这通常可以正常工作,但它永远不会刷新滚动文件的值。
解决方案
我现在可以通过查找来解决它: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();
}
}
不要忘记 "$$" 在运行时读取值。
推荐阅读
- html - 无法修复表格 td 宽度
- php - Waring:自 PHP7.1 以来,联系人表单中“名称”中的非法字符串偏移量
- c# - 分配函数返回的 IEnumerable
对另一个对象的价值 - python - 从关系属性访问列值
- c# - 在 Visual Studio 中将机器人部署到 Azure 时发布错误
- r - 如何计算R中列的每个字符串的第一个字符的出现次数
- indexing - 按记录名称查找记录中的索引
- node.js - 为什么中间件的内容在浏览器的单个请求中运行四次
- mongodb - 我在我的数据/数据库路径上找不到 MongoDB 数据库
- php - 通过 android studio 将图像上传到 000webhost.com