如何在单个项目中使用具有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来设置具有系统属性的日志文件的名称。 例如:
- 你的appender可以如下设置文件:
<file>/var/tmp/${mycompany.myapplication}.log</file>
- 然后你可以在启动java时指定这个variables的值:
-Dmycompany.myapplication=SomeUtility
选项3:使用系统属性设置logging器级别。 这将允许您logging更多/更less。 例如:
- 把这个放到你的logbackconfiguration文件中:
<logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
这会导致指定的软件包在默认情况下以DEBUG级别login。 - 如果要在特定应用程序中将日志logging级别更改为INFO,请在启动该应用程序时将以下内容传递给java:
-Dmycompany.logging.level=INFO
选项4:通过将系统属性命令行parameter passing给java来添加/删除appender。 这将允许您login到不同的地方。 请注意, 条件处理需要janino 。 例如:
- 把它放到你的logbackconfiguration文件中,放置一个
<appender-ref>
,将ref
值改为你自己的一个<appender>
,当然是:
<if condition="property("mycompany.logging.console").equalsIgnoreCase("true")"> <then><appender-ref ref="STDOUT"/></then></if>
- 如果你想启用这个appender,那么当启动该应用程序时,将以下内容传递给java:
-Dmycompany.logging.console=true
关于系统属性,你将它们作为-D
parameter passing给java,例如
java -Dmy.property=/path/to/config.xml com.mycompany.MyMain