gpt4 book ai didi

java - Log4j2:根据环境变量更改模式

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:42 27 4
gpt4 key购买 nike

我想配置我的 log4j2.xml 的值的<Pattern/>元素。

名义上我们有这样的模式:

<Console name="Console" target="SYSTEM_OUT">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%xEx{filters(${filters})}%n</Pattern>
</PatternLayout>
</Console>

我们代码的一个用户想要一个不同的模式(他们有一个限制,即“日志条目不得跨越多行——即使它们有堆栈跟踪”),如下所示:

<Pattern>%replace{%d %p %c{1.} [%t] %m%xEx{filters(${filters})}}{(\n|\r)+}{, }%n</Pattern>

每个用户都可以独立指定自己的环境,所以我觉得这是让他们选择自己的模式的好方法。

我知道<Pattern/>是可能的元素到specify the pattern using Environment Variables 。例如:

<Pattern>%d %p %c{1.} [%t] $${env:USER} %m%n</Pattern>

我也知道it is possible to specify a default/fallback value ,像这样:$${env:USER:-default} 。这很好,因为我希望标称模式成为默认模式,并且无需指定定制环境即可工作。

所以,我尝试了这种模式:

<Pattern>$${env:LOG_SYSOUT_PATTERN:-%d %p %c{1.} [%t] %m%xEx{filters(${filters})}%n}</Pattern>

我的理解是,它将允许用户在 LOG_SYSOUT_PATTERN 中指定模式。 ,但否则会回退到通常的模式。

我希望我的日志条目看起来像这样:

2016-09-27 10:47:32,073 INFO c.b.b.a.Engine [main] Sleeping AuditEngine for 1000 ms

但是好像失败了。我的模式实际得到的是这样的:

${env:LOG_SYSOUT_PATTERN:-2016-09-27 10:47:29,642 INFO c.b.b.a.Engine [main] Sleeping AuditEngine for 1000 ms
}

我描述的用例是否超出了 log4j2 字符串插值的限制?

显然我可以使用环境变量来指向不同的 log4j2.xml完全文件,但我更喜欢一种不涉及为一个用户定制差异而维护和部​​署两个文件的解决方案。

我们使用 Log4j 2.5 和 SLF4J 1.7.16。

最佳答案

您的模式有误尝试一下

<Pattern>$${env:LOG_SYSOUT_PATTERN}:-%d %p %c{1.} [%t] %m%xEx{filters(${filters})}%n</Pattern>

关于java - Log4j2:根据环境变量更改模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39722973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com