【问题标题】:How to write custom header in log4j2如何在 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] [%d{dd 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=[%d{dd 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 中执行此操作。

【问题讨论】:

标签: java logging log4j log4j2


【解决方案1】:

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

模式 = [%X{全局}] | [$${env:RUNTIME_ENVIRONMENT}] | [%级别] | [%logger{15}] | [方法:%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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2022-01-13
    • 2014-08-03
    • 2015-07-26
    相关资源
    最近更新 更多