我想用javacode打开/关闭stdout的appender。
这是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,第二个条目设置loglevel。如果我启动应用程序,则loglevel正在运行但不启用“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) {
答案 0 :(得分:0)
您需要使用scan
属性强制回退每X秒重新配置一次,例如:
<configuration scan="true" scanPeriod="30 seconds" >
更多信息可以在http://logback.qos.ch/manual/configuration.html#autoScan
找到答案 1 :(得分:0)
您的logback.xml
的结构应如下所示:
<configuration>
<if condition='isDefined("otherlog")'>
<then>
<appender name="CLOUD" class="com.google.cloud.logging.logback.LoggingAppender">
<!-- Optional : filter logs at or above a level -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
...
</appender>
<root level="debug">
<appender-ref ref="CLOUD"/>
</root>
</then>
<else>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</else>
</if>
</configuration>
然后,如果您使用-Dotherlog=true
运行应用程序,它将使用com.google.cloud.logging.logback.LoggingAppender
,否则将使用ch.qos.logback.core.ConsoleAppender