如何在 log4j2 中编写自定义标头
Posted
技术标签:
【中文标题】如何在 log4j2 中编写自定义标头【英文标题】:How to write custom header in log4j2 【发布时间】:2021-02-10 06:47:03 【问题描述】:我想在日志文件的开头写入自定义标题行。自定义标题是 日期/时间、XML 文件名、
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 中编写自定义标头的主要内容,如果未能解决你的问题,请参考以下文章