2016-12-02 1349 views
1

我有一個logback XML配置文件,我使用自定義標籤轉換器來標記我的日誌消息。如何以編程方式爲logback設置conversionRule?

<configuration scan="true"> 
    <conversionRule conversionWord="tag" 
        converterClass="com.foo.MyCustomTagConverter" /> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are by default assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder --> 
    <encoder> 
     <pattern>%tag - %m%n</pattern> 
    </encoder> 
    </appender> 

... 

</configuration> 

如何通過Java以編程方式執行此操作?

回答

1
public class loggerutils { 
     static Logger foo = createLoggerFor("foo", "foo.log"); 
     public static void main(String[] args) { 
      foo.info("test"); 
     } 

     private static Logger createLoggerFor(String string, String file) { 
      String conversionWord = "tag"; 
      String converterClass = "com.foo.MyCustomTagConverter"; 
      LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
      Map<String, String> ruleRegistry = (Map) lc 
        .getObject(CoreConstants.PATTERN_RULE_REGISTRY); 
      if (ruleRegistry == null) { 
       ruleRegistry = new HashMap<String, String>(); 
      } 
      lc.putObject(CoreConstants.PATTERN_RULE_REGISTRY, ruleRegistry); 
      ruleRegistry.put(conversionWord, converterClass); 

      PatternLayoutEncoder ple = new PatternLayoutEncoder(); 
      ple.setPattern("%-20tag %-30(%d{HH:mm:ss.SSS} [%thread]) - %-15(%M) - %-5level -%logger{32} - %msg%n "); 

      ple.setContext(lc); 
      ple.start(); 

      ConsoleAppender<ILoggingEvent> consoleAppender = new ConsoleAppender<ILoggingEvent>(); 
      consoleAppender.setEncoder(ple); 
      consoleAppender.setContext(lc); 
      consoleAppender.start(); 

      Logger logger = (Logger) LoggerFactory.getLogger(string); 
      logger.addAppender(fileAppender); 
      logger.setLevel(Level.DEBUG); 
      logger.setAdditive(false); /* set to true if root should log too */ 
      logger.addAppender(consoleAppender); 
      logger.setLevel(Level.DEBUG); 
      logger.setAdditive(false); 
      return logger; 
     } 
    } 
+1

代碼的牆並不是一個真正的答案,有些上下文會很有用。 – muttonUp

+0

爲什麼代碼沒有用? OP詢問如何以編程方式執行此操作。代碼是上下文。是否有一行代碼令人困惑? – timmy

相關問題