gpt4 book ai didi

logback - 如何根据上下文名称有条件地配置 logback?

转载 作者:行者123 更新时间:2023-12-04 02:46:03 42 4
gpt4 key购买 nike

我有三个独立的项目,每个项目都有自己的嵌入式 logback.xml 文件。这些文件中的每一个都在用户的主目录中包含一个通用的日志配置文件:

<include file="${user_home}/loggingConfig.xml"/>

在包含之后,我有这个规范:
<root level="error">
<appender-ref ref="${appender:-console}" />
</root>

这允许用户配置他们的日志级别和附加程序,并通过核心日志配置文件应用它们。

例如,在 ~/loggingConfig.xml 我有这一行:
<property name="appender" value="file" />

但是喜欢控制台日志记录的同事忽略了这条线。

问题是我想为每个日志文件使用不同的附加程序。换句话说,我想根据哪个项目正在读取自定义配置文件,有条件地设置一个不同的 appender。

我意识到我可以将每个项目配置为读取不同命名的配置文件,但我想消除困惑并允许共享配置。

最佳答案

该文档对于高级配置来说有点多余,但我发现您可以将 logback 上下文名称用作具有条件日志记录的变量。因此,对于每个项目,我在项目 logback.xml 文件中定义了一个自定义上下文名称:

<contextName>project1</contextName>

等等...

然后在我的 ~/loggingConfig.xml 文件中,我可以这样做:
<property name="appender" value="file" />

<!--if condition='property("CONTEXT_NAME").equalsIgnoreCase("project1")'>
<then>
<property name="appender" value="file" />
</then>
</if-->
<if condition='property("CONTEXT_NAME").equalsIgnoreCase("project2")'>
<then>
<property name="appender" value="console" />
</then>
</if>
<if condition='property("CONTEXT_NAME").equalsIgnoreCase("project3")'>
<then>
<property name="appender" value="file" />
</then>
</if>

这可能有点笨拙,但实际上我正在使用这个解决方案来配置单个 appender 用于不同项目的属性,同时仍然可以优雅地回退到没有自己的条件块的项目的默认值。

关于logback - 如何根据上下文名称有条件地配置 logback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911303/

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