我的公司有一个环境管理工具,使您能够在Java中以编程方式从环境中查找属性。我想利用此工具来配置logback。例如,假设我有一个如下所示的logback.xml (特别是文件附加器部分):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- console appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd/HH:mm:ss.SSS} [%thread] %-5level %logger{20}: %msg%n</pattern>
</encoder>
</appender>
<!-- file appender -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_FILE:-/default/log/file/path</file>
<encoder>
<pattern>%d{yyyy-MM-dd/HH:mm:ss.SSS} [%thread] %-5level %logger{20}: %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>因此,在本例中,我希望从环境(或操作系统,如果您愿意)中查找LOG_FILE属性,并在logback加载logback.xml之前将其传递给logback,以便它知道LOG_FILE的值。那么,我如何才能做到这一点呢?顺便说一句,我知道如何以编程方式定义文件附加器,但这不是我在这里想要的。
非常感谢。
发布于 2014-06-18 04:37:15
在经历了相当多的挠头之后,我决定采用以下解决方案。
首先,将logback.xml放在类路径之外,这样logback就不会自动加载任何内容。
其次,将环境中的设置添加到系统属性中,以便logback可以在解析logback.xml时查找它们。
第三,在应用程序代码中以编程方式配置logback。(官方的logback文档中有one nice example。)
好了。
发布于 2019-12-05 20:33:53
试试这个:
在logback.xml中,通过% Property {myProperty}引用您的属性:
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%property{myProperty} - %m%n%wEx
</pattern>
</encoder>
</appender>在应用程序运行时设置属性:
LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
loggerContext.putProperty("myProperty", "myProperty12345");https://stackoverflow.com/questions/24235296
复制相似问题