如何在单个项目中使用多个配置和日志备份?

2022-08-31 20:35:55

用于 logback 的配置文件在类路径上找到,因此是特定于 Eclipse 项目的,这不是我想要的。我正在使用多个Java实用程序,所有这些实用程序都驻留在一个项目中(共享类路径),我需要对其中一些使用特定的配置。

我尝试过变量替换和Joram配置器,但对我没有任何用处。这很可能是我的错,有一天我会解决它,但现在我需要一个简单的解决方案。


答案 1

选项 1:使用 logback.configurationFile 系统属性指定 logback 配置文件的位置。这实际上允许您每个项目拥有多个配置文件。根据 logback 文档,this 属性的值可以是 URL、类路径上的资源或应用程序外部文件的路径。例如:
-Dlogback.configurationFile=/path/to/config.xml

选项 2:使用变量替换设置具有系统属性的日志文件的名称。例如:

  1. 您的追加器可以按如下方式设置文件:
    <file>/var/tmp/${mycompany.myapplication}.log</file>
  2. 然后,您可以在启动java时指定该变量的值:
    -Dmycompany.myapplication=SomeUtility

选项 3:使用系统属性设置记录器级别。这将允许您记录更多/更少。例如:

  1. 将其放入 logback 配置文件中:

    默认情况下,这会导致指定的包在 DEBUG 级别记录。<logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
  2. 如果要在特定应用程序中将日志记录级别更改为 INFO,请在启动该应用程序时将以下内容传递给 java:
    -Dmycompany.logging.level=INFO

选项 4:通过将系统属性命令行参数传递给 java 来添加/删除追加器。这将允许您登录到不同的地方。请注意,条件处理需要 janino。例如:

  1. 当然,将其放入您的 logback 配置文件中,无论您将 放置 一个 ,都将值更改为您自己的值之一:<appender-ref>ref<appender>
    <if condition="property("mycompany.logging.console").equalsIgnoreCase("true")"> <then><appender-ref ref="STDOUT"/></then></if>
  2. 如果要启用此追加器,请在启动该应用程序时将以下内容传递给 java:
    -Dmycompany.logging.console=true

关于系统属性,您可以将它们作为参数传递给java,例如-D
java -Dmy.property=/path/to/config.xml com.mycompany.MyMain


答案 2

在 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>
  ...

推荐