如何根据上下文名称有条件地配置Logback? [英] How can I configure logback conditionally based on context name?

查看:25
本文介绍了如何根据上下文名称有条件地配置Logback?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

在包含之后,我有这样的规范:

<root level="error">
    <appender-ref ref="${appender:-console}" />
</root>

这允许用户配置其日志级别和附加器,并通过核心日志记录配置文件应用它们。

例如,在~/loggingConfig.xml中,我有这样一行:

<property name="appender" value="file" />

但更喜欢控制台记录的同事省略了这一行。

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

我意识到我可以将每个项目配置为读取不同名称的配置文件,但我希望消除混乱并允许共享配置。

推荐答案

文档有点不适合高级配置,但我发现您可以将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>

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

这篇关于如何根据上下文名称有条件地配置Logback?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆