2016-12-02 6 views
1

У меня есть файл конфигурации XML-файла журнала, в котором я использую свой собственный тег-конвертер для тегов сообщений журнала.Как программно установить 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

Почему код не полезен? ОП попросил, как это сделать программно. Код - это контекст. Есть ли строка кода, которая запутывает? – timmy