java
  • xml
  • logback
  • 2016-11-29 13 views 0 likes 
    0

    私は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) { 
    

    答えて

    0

    は、あなたが自分自身を再構成するlogbackを強制的にscan属性を使用する必要があるすべてのX秒例:

    <configuration scan="true" scanPeriod="30 seconds" >

    ここをクリックhttp://logback.qos.ch/manual/configuration.html#autoScan

    +0

    これはlogback.xmlを変更する場合に重要です。これは私のlogback.xmlにもあります。そして、logback.xmlで何かを変更すると、設定が変更されます。 –

    関連する問題