Logback配置:提取可重用部分

3
有没有一种方法来因式分解和参数化Logback XML配置中重复的部分?我有许多不同的滚动文件附加器基本上都配置相同,除了文件名。我与一堆记录器一起使用它们的“可添加性”关闭,以便我可以将堆栈的不同部分重定向到不同的文件。这导致一个笨重且较长的配置文件,由许多几乎相同的段组成。
我之前使用过Logback的功能,但它并未解决此重用问题,因为我无法将包含的配置进行参数化。我期望这样的功能看起来类似于:
<include resource="file-appender.xml">
    <property name="filePath" value="/where/logs/go" />
    <property name="baseLogger" value="com.mycompany.thatpartofthestack" />
</include>

但据我了解,这只是一厢情愿的想法。是否有其他的方法可以通过模板、宏、函数或其他方式来因素化Logback的配置?


1
我已经创建了一个问题来在Logback中添加对此的支持:http://jira.qos.ch/browse/LOGBACK-1104 - Alexei Osipov
1个回答

2
尝试在本地和/或上下文范围中使用变量替换。也许最简单的方法是在某个资源文件中定义变量,例如每个应用程序都捆绑了logback.properties。此外,每个应用程序都将携带一个导入logback.propertieslogback.xml文件。
<configuration debug="true">
  <property resource="logback.properties" />
  <!-- set root level as given by the value of the root.level variable -->
  <!-- if root.level is undefined default to DEBUG -->
  <root level="${root.level:-DEBUG}"/>
</configuration>

如果您希望将webapp-A的根级别设置为WARN,只需在与webapp-A捆绑的logback.properties文件中添加以下行。
root.level=WARN

您可以将logback.xml作为一个资源捆绑在一个通用的构件中,以供各种应用程序使用。

1
我希望日志配置文件存放在打包应用程序之外的配置目录中。我通过编程加载配置以实现此目的。这种机制是否依赖于自动配置文件发现,或者我只需连续多次调用“configurator.setContext(context)”而不调用“reset”,从而加载多个配置文件?除非我在这里漏掉了什么,否则我仍然看不到从文件外部加载的配置文件的参数化方法。我想我可以始终将其模板化并动态生成配置。 - Ophir Radnitz
如果你是以编程方式调用 Joran,那就更容易了。试试看吧。 - Ceki
如何在logback.groovy中使用它? - Chinaxing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接