如何在单个项目中使用多个配置和回溯?

时间:2011-07-14 20:30:34

标签: java logging configuration logback

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

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

3 个答案:

答案 0 :(得分:59)

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

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

  1. 您的appender可以按如下方式设置文件:
    <file>/var/tmp/${mycompany.myapplication}.log</file>
  2. 然后你可以在启动java时指定该变量的值:
    -Dmycompany.myapplication=SomeUtility
  3. 选项3:使用系统属性设置记录器级别。这将允许您更多/更少地记录。例如:

    1. 将此信息放入您的logback配置文件中:
      <logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
      这会导致指定的包默认以DEBUG级别登录。
    2. 如果要在特定应用程序中将日志记录级别更改为INFO,请在启动该应用程序时将以下内容传递给java:
      -Dmycompany.logging.level=INFO
    3. 选项4:通过将系统属性命令行参数传递给java来添加/删除appender。这将允许您登录到不同的地方。请注意logback documentation。例如:

      1. 将此放入您的logback配置文件,无论您将<appender-ref>置于何处,将ref值更改为您自己的<appender>之一,当然: <if condition="property("mycompany.logging.console").equalsIgnoreCase("true")"> <then><appender-ref ref="STDOUT"/></then></if>
      2. 如果要启用此appender,请在启动该应用程序时将以下内容传递给java:
        -Dmycompany.logging.console=true
      3. 关于系统属性,您将它们作为-D参数传递给java,例如
        java -Dmy.property=/path/to/config.xml com.mycompany.MyMain

答案 1 :(得分:1)

在Spring Boot应用程序中,您可以在logback配置文件中引用Spring Profiles。

请参见this article

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

答案 2 :(得分:0)

我使用了另一个基于Leonidas blog的选项。有一个可选的属性文件(environment.properties),其中包含环境属性和自定义配置(例如logback-env-test.xml)。所有这些文件必须在类路径上。

如果属性文件存在并定义了synchronized属性,例如

logEnv

logback尝试从logback-env-dev66.xml查找并包括自定义配置

logEnv = dev66

否则,它将默认返回到默认(<included> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT" /> </root> </included> 部分)配置。请注意,自定义配置文件中使用的是<else>标签,而不是<included>

logback.xml以管理以上所有内容:

<configuration>