2017-02-22 13 views
0

У меня есть приложение Async, которое работает только тогда, когда я устанавливаю level = debug. Для уровня «ошибки» он ничего не записывает.log4j2 Async appender работает только для уровня отладки

<Configuration packages="com.custom.appender"> 
<Appenders> 
<CustomLogger name="customLogger"/> 
<Async name="customAsync" bufferSize="2" includeLocation="flase"> 
    <AppenderRef ref="customLogger"/> 
</Async> 
</Appenders> 
<Loggers> 
<logger name="com.mypackage" level="error"> 
    <AppenderRef ref="customAsync"/> 
</logger> 
</Loggers> 
</Configuration> 

Я не уверен, что мне не хватает в этой конфигурации. Это обычай Appender, что я пытаюсь использовать

package com.custom.appender 
@Plugin(name = "CustomLogger", category = "Core", elementType = "appender", printObject = true) 
public class CustomLogger extends AbstractAppender { 

private static volatile CustomLogger instance; 

public CustomLogger(final String name, final Filter filter, 
     final Layout<? extends Serializable> layout) { 
    super(name, filter, layout); 
} 

@PluginFactory 
public static CustomLogger createAppender(
     @PluginAttribute("name") String name, 
     @PluginAttribute("ignoreExceptions") boolean ignoreExceptions, 
     @PluginElement("Layout") Layout layout, 
     @PluginElement("Filters") Filter filter) { 
    if (layout == null) { 
     layout = PatternLayout.createDefaultLayout(); 
    } 

    instance = new CustomLogger(name, filter, layout); 
    return instance; 
} 

public static CustomLogger getInstance() { 
    return instance; 
} 

@Override 
public void append(LogEvent event) { 
    //Log the event to mongoDB 
} 

}

+0

Какой тип Appender вы пытаетесь использовать? Это консольный appender? –

+0

Я не думаю, что ссылка на элемент журнала из элемента Async appender верна. Оттуда вы должны получить доступ к приложению. –

+0

https://logging.apache.org/log4j/2.x/manual/configuration.html –

ответ

0

Попробуйте следующее

<Configuration packages="com.custom.appender"> 
    <Appenders> 
     <Async name="customAsync" bufferSize="2" includeLocation="flase"> 
      <AppenderRef ref="customConsoleLogger"/> 
     </Async> 
     <Console name="customConsoleLogger" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
    </Appenders> 

    <Loggers> 
     <Logger name="com.mypackage" level="INFO"> 
      <AppenderRef ref="customAsync"/> 
     </Logger> 
    </Loggers> 
</Configuration> 
+1

Этот код работает, но когда я переключаю регистратор в Async использовать мой собственный регистратор, вот когда у меня возникла проблема. В моем пользовательском журнале я регистрирую событие в mongoDB, элемент управления находится в моем приложении, но ничто не регистрируется в mongoDB, когда уровень является ошибкой. Если я изменю уровень для отладки, я вижу свои события в mongoDB – Anyz

+0

@Anyz Есть ли у вас журналы ошибок там? Когда вы установите уровень журнала на ERROR, вы увидите только журналы ERROR и FATAL. –

+0

Я думаю, что, возможно, я нашел причину. Я не думаю, что это имеет какое-то отношение к уровню. Когда я регистрирую ERROR, у меня не так много событий, связанных с приложением, и я пытаюсь подключиться к mongoDB в моем методе append(), и он не работает на моей записи mongo. Интересно, что я не получаю никаких ошибок, но я ввел некоторые явные протоколирования и вижу, что это просто останавливается на моей команде mongo write. – Anyz

 Смежные вопросы

  • Нет связанных вопросов^_^