如何在单个项目中使用多个配置和日志备份?
2022-08-31 20:35:55
用于 logback 的配置文件在类路径上找到,因此是特定于 Eclipse 项目的,这不是我想要的。我正在使用多个Java实用程序,所有这些实用程序都驻留在一个项目中(共享类路径),我需要对其中一些使用特定的配置。
我尝试过变量替换和Joram配置器,但对我没有任何用处。这很可能是我的错,有一天我会解决它,但现在我需要一个简单的解决方案。
用于 logback 的配置文件在类路径上找到,因此是特定于 Eclipse 项目的,这不是我想要的。我正在使用多个Java实用程序,所有这些实用程序都驻留在一个项目中(共享类路径),我需要对其中一些使用特定的配置。
我尝试过变量替换和Joram配置器,但对我没有任何用处。这很可能是我的错,有一天我会解决它,但现在我需要一个简单的解决方案。
选项 1:使用 logback.configurationFile 系统属性指定 logback 配置文件的位置。这实际上允许您每个项目拥有多个配置文件。根据 logback 文档,this 属性的值可以是 URL、类路径上的资源或应用程序外部文件的路径。例如:-Dlogback.configurationFile=/path/to/config.xml
选项 2:使用变量替换设置具有系统属性的日志文件的名称。例如:
<file>/var/tmp/${mycompany.myapplication}.log</file>
-Dmycompany.myapplication=SomeUtility
选项 3:使用系统属性设置记录器级别。这将允许您记录更多/更少。例如:
<logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
-Dmycompany.logging.level=INFO
选项 4:通过将系统属性命令行参数传递给 java 来添加/删除追加器。这将允许您登录到不同的地方。请注意,条件处理需要 janino。例如:
<appender-ref>
ref
<appender>
<if condition="property("mycompany.logging.console").equalsIgnoreCase("true")">
<then><appender-ref ref="STDOUT"/></then></if>
-Dmycompany.logging.console=true
关于系统属性,您可以将它们作为参数传递给java,例如-D
java -Dmy.property=/path/to/config.xml com.mycompany.MyMain
在 Spring Boot 应用程序中,您可以在 logback 配置文件中引用 Spring 配置文件。
请参阅此文章。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProfile name="dev">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} | %5p | %logger{25} | %m%n
</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
...