Can I disable an appender in logback?
Not sure why you want to deactivate an appender, what are you trying to achieve by disabling.
There are some ways to achieve it
- Add the appender in logback.xml and keep it commented. When you like to enable it then uncomment the appender and reload logback configuration (http://logback.qos.ch/manual/configuration.html#autoScan)
- Add a logger like the one given below and use appropriate logger for logging
<configuration>
<appender name="stdoutappender" />
<appender name="dbappender" />
<logger name="stdoutlogger" level="DEBUG">
<appender-ref ref="stdoutappender" />
</logger>
<logger name="dblogger" level="OFF">
<appender-ref ref="dbappender" />
</logger>
</configuration>
In this case also you have to reload the configuration when you modify logback configuration (logback.xml)
- If you know the conditions (to activate/deactivate) beforehand then use if else block to enable/disable
On top of above 3 options you can create logback configurations progamatically
The easy way to choose a logging level for an appender is to use a ThresholdFilter
, e.g.:
<appender name="ap.Console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${logging.appender.console.level:-OFF}</level>
</filter>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
When you want to activate a particular appender you should run your jvm with an appropriate -D
option. For the appender defined above it would be:
java -Dlogging.appender.console.level=DEBUG
Of course if you activate automatic configuration reloading (http://logback.qos.ch/manual/configuration.html#autoScan) you can change filter level while the app is running.
The approach I've proposed is convenient when you don't want to change your logback config file every time you start the app (with different logging levels). You simply have to set properties used in logback config by running jvm with corresponfing -D
options.