如何在 log4j2 中编写自定义标头

Posted

技术标签:

【中文标题】如何在 log4j2 中编写自定义标头【英文标题】:How to write custom header in log4j2 【发布时间】:2021-02-10 06:47:03 【问题描述】:

我想在日志文件的开头写入自定义标题行。自定义标题是 日期/时间、XML 文件名、。 在 log4j 中,我可以通过扩展 PatternLayout 创建自定义标题。 我已经为自定义标题包含了 PatternLayout 的 log4j 属性配置和子类 CustomFileHeaderLayout。它工作正常。

log4j.properties

log4j.rootLogger=TRACE, R1, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.ibfd.addmliednotes.util.CustomFileHeaderLayout
##org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%p] [%ddd MMM hh:mm:ss aa] - %m%n
log4j.appender.R1=org.ibfd.addmliednotes.util.CustomFileAppender
##org.apache.log4j.RollingFileAppender
log4j.appender.R1.File=$file.name
log4j.appender.R1.MaxFileSize=10MB
log4j.appender.R1.layout=org.ibfd.addmliednotes.util.CustomFileHeaderLayout
log4j.appender.R1.layout.ConversionPattern=[%ddd MMM hh:mm:ss aa] %m%n

CustomFileHeaderLayout.java

public class CustomFileHeaderLayout extends PatternLayout  
    public String getHeader()  
        return "Date/Time, XML filename, <treatydoc or <amendingdoc, Message\r\n";
     

但是,我无法在 log4j2 中执行此操作,因为 log4j2 的 PatternLayout 声明为最终类并且也不提供 getHeader() 方法。我不确定如何在 log4j2 中执行此操作。

【问题讨论】:

问题已在***.com/questions/24553348/…得到解答 【参考方案1】:

我在我的 log4j2 模式中添加了一些额外的东西......比如环境变量或上下文变量......我希望它对你有帮助

模式 = [%X全局] | [$$env:RUNTIME_ENVIRONMENT] | [%级别] | [%logger15] | [方法:%M 行:%L %msg]%n

RUNTIME_ENVIRONMENT 是设置用户配置文件,或带有设置或导出的命令行... 全局设置使用 log4j2 上下文和 org.apache.logging.log4j.ThreadContext (ThreadContext.put("global", "anything"))

看看https://logging.apache.org/log4j/2.x/manual/layouts.html

【讨论】:

以上是关于如何在 log4j2 中编写自定义标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 log4j2 中创建自定义 Appender?

如何使用 python 请求模块创建自定义标头

如何在log4j2中创建自定义Appender?

如何在弹性 beantalk 负载均衡器中设置自定义标头相关规则

如何在无服务器中允许 CORS 用于自定义标头?

教你打印自己的日志 -- 如何自定义 log4j2 各组件