私はjavacodeで標準出力のアペンダをオン/オフしたいと思っています。Javaでlogback.xmlのアペンダをオン/オフに切り替えるには
これはlogback.xmlの抜粋です:
<root level="error">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
<if condition='property("log2console").contains("true")'>
<then>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${PATTERN}</pattern>
</encoder>
</appender>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
私はアプリケーションを起動する前に、私はプロパティを設定している場合、それは動作します。しかし、アプリケーションが起動し、プロパティ "log2Console = true"を変更した場合、動作しません。
私はテキストファイルを使用しています。ロギングを設定します。最初のエントリはlog2Consoleを有効にし、2番目のエントリはログレベルを設定する必要があります。私はアプリケーションを起動した場合にログレベルは、作業ではなく、私は違う試す「log2console」 を有効にします
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
try (BufferedReader br = new BufferedReader(new FileReader(log2Console))) {
String sCurrentLine;
boolean Enablelog2Console = false;
while ((sCurrentLine = br.readLine()) != null) {
if (sCurrentLine.equals("true")) {
Enablelog2Console = true;
Properties prop = new Properties();
//try with different optionen
prop.setProperty("log2console", "true");
lc.putProperty("log2console", "true");
}
if (Enablelog2Console) {
Logger rootLOG = (Logger) org.slf4j.LoggerFactory
.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
if (sCurrentLine.equals("trace")) {
((ch.qos.logback.classic.Logger) rootLOG).setLevel(Level.TRACE);
} else if (sCurrentLine.equals("debug")) {
((ch.qos.logback.classic.Logger) rootLOG).setLevel(Level.DEBUG);
} else if (sCurrentLine.equals("info")) {
((ch.qos.logback.classic.Logger) rootLOG).setLevel(Level.INFO);
} else if (sCurrentLine.equals("warn")) {
((ch.qos.logback.classic.Logger) rootLOG).setLevel(Level.WARN);
} else if (sCurrentLine.equals("error")) {
((ch.qos.logback.classic.Logger) rootLOG).setLevel(Level.ERROR);
}
System.out.println("das LogLevel wurde auf " + sCurrentLine + " eingestellt.");
}
}
} catch (IOException e) {
これはlogback.xmlを変更する場合に重要です。これは私のlogback.xmlにもあります。そして、logback.xmlで何かを変更すると、設定が変更されます。 –