我们正在编写2个追加程序,以将不同格式的日志写入2个不同的文件。 但是我们要基于某些配置启用这些日志。
因此,如果用户要启用这两种格式,则将同时打印两个日志。但是,如果用户要禁用该日志,则不应创建该日志。
下面是我的记录器配置:
<logger name="package.name" additivity="false" level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="json_logs"/>
<appender-ref ref="text_logs"/>
</logger>
现在,我想为这个appender-ref放置单独的级别。这些级别的值应该来自将由用户编辑的某些属性文件,或者用户仅可以更新 logback.xml 文件。
我找不到为这些附加程序放置单独级别的方法。 而且由于必须编写相同类的日志,所以我也无法创建2个单独的记录器。
此外,如果用户不想看到txt日志,则不应创建相应的log.txt文件。
答案 0 :(得分:0)
您需要的是ThresholdFilter,可以对每个附加程序进行微调:
http://logback.qos.ch/manual/filters.html#thresholdFilter
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
...
</appender>
至于完全不基于某个标志写入文件...您可以编写自己的附加程序。像这样的超简单示例可以通过多种方式完善,但希望可以帮助您入门:
public class ConditionalAppender<E> extends OutputStreamAppender<E> {
private boolean masterSwitch;
private String file;
@Override
public void start() {
if(masterSwitch)
setOutputStream(new FileOutputStream(file));
else
setOutputStream(new NullOutputStream());
super.start();
}
public void setMasterSwitch(final boolean enabled) {
this.masterSwitch = enabled;
}
public void setFile(final String file) {
this.file = file;
}
}
<appender name="CONDITIONAL" class="mypackage.ConditionalAppender">
<!-- switch this appender on or off -->
<masterSwitch>true</masterSwitch>
<!-- set the output file -->
<file>/var/log/app/app.log</file>
<!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
...
</appender>
希望这会有所帮助。