如何在单个项目中使用具有logback的多个configuration?

logback的configuration文件可以在类path中find,因此是Eclipse-project-specific,这不是我想要的。 我使用多个Java实用程序,所有这些实用程序驻留在一个单独的项目(这共享类path),我需要使用一些特定的configuration。

我试过variables替代和Joramconfiguration器,但没有为我工作。 这很可能是我的错,有一天我会解决它,但现在我需要一个简单的解决scheme。

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

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

  1. 你的appender可以如下设置文件:
    <file>/var/tmp/${mycompany.myapplication}.log</file>
  2. 然后你可以在启动java时指定这个variables的值:
    -Dmycompany.myapplication=SomeUtility

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

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

选项4:通过将系统属性命令行parameter passing给java来添加/删除appender。 这将允许您login到不同的地方。 请注意, 条件处理需要janino 。 例如:

  1. 把它放到你的logbackconfiguration文件中,放置一个<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

关于系统属性,你将它们作为-Dparameter passing给java,例如
java -Dmy.property=/path/to/config.xml com.mycompany.MyMain