Can I disable an appender in logback on the xml config? I have my configuration and I want to put two appenders, one for database and other for text logs, but only one must
Not sure why you want to deactivate an appender, what are you trying to achieve by disabling.
There are some ways to achieve it
<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)
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.