2015-06-09 2 views
0

Я пытаюсь создать собственный конвертер для log4j в приложении mule. Я хочу поместить «% foo» в макет шаблона и определить этот вывод в классе java.Пользовательский конвертер с log4j2 и Mule не работает

Мой класс преобразования выглядит следующим образом:

package my.package 

@Plugin(name = "MyConverter", category = "Converter") 
@ConverterKeys(["foo"]) 
public final class MyConverter extends LogEventPatternConverter { 

    protected MyConverter(String name, String style) { 
     super(name, style) 
    } 

    public static MyConverter newInstance(final String[] options) { 
     return new MyConverter("foo", "foo"); 
    } 

    @Override 
    public void format(LogEvent arg0, StringBuilder arg1) { 
     arg1.append("hello") 
    } 
} 

Мой log4j2.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration verbose="true" packages="my.package"> 

    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%-5p [%t] %c: %m%n"/> 
     </Console> 
     <File name="mylog" fileName="${env:MULE_HOME}/logs/mylog.log"> 
      <PatternLayout pattern="%-4p %d [%t] [%foo] %c: %m%n"/> 
     </File> 
    </Appenders> 

... 

Все я получаю, когда я начинаю свой мул приложение это в mule.log файл

ERROR Unrecognized format specifier [foo] 

ответ

0

Вместо этого вы можете использовать класс MDC (диагностический контекст) log4j. См. [Здесь] (https://blog.oio.de/2010/11/09/logging-additional-information-like-sessionid-in-every-log4j-message/) для краткого примера.

+0

Я думаю, что MDC использует ThreadLocal для хранения Карты для текущих потоков. Это проблема, поскольку Mule запускает несколько потоков (например: Scatter-Gather), которые не используют один и тот же TheadContext. – luhuec