The configuration file for logback gets found on the classpath, and is therefore Eclipse-project-specific, which is not what I want. I'm using multiple Java utilities, all of them residing in a single project (this sharing the classpath), and I need to use a specific configuration for some of them.
I've tried variable substitution and Joram configurator, but nothing worked for me. This was most probably my fault, and I'm going to solve it one day, but for now I'd need a simple solution.
OPTION 1: specify the location of the logback configuration file with the logback.configurationFile system property. This does in fact allow you to have multiple configuration files per project. As per the logback documentation, the value of the this property can be a URL, a resource on the class path or a path to a file external to the application. For example:
-Dlogback.configurationFile=/path/to/config.xml
OPTION 2: use variable substitution to set the name of the log file with a system property. For example:
<file>/var/tmp/${mycompany.myapplication}.log</file>
-Dmycompany.myapplication=SomeUtility
OPTION 3: set the logger level with a system property. This will allow you to log more/less. For example:
<logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
-Dmycompany.logging.level=INFO
OPTION 4: add/remove an appender by passing a system property command-line parameter to java. This will allow you to log to different places. Note that conditional processing requires janino. For example:
<appender-ref>
, changing the ref
value to one of your own <appender>
s, of course:
<if condition="property("mycompany.logging.console").equalsIgnoreCase("true")">
<then><appender-ref ref="STDOUT"/></then></if>
-Dmycompany.logging.console=true
Regarding system properties, you pass them to java as -D
arguments, e.g.
java -Dmy.property=/path/to/config.xml com.mycompany.MyMain