2017-02-22 49 views
0

我有一個異步appender,只有當我設置level = debug時才起作用。對於「錯誤」級別,它不會記錄任何內容。log4j2異步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> 

我不知道我在這個配置中缺少什麼。這是我想使用

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

我不認爲引用來自異步appender元素的記錄器元素是正確的。從那裏你必須訪問一個appender。 –

+0

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

回答

0

嘗試定製的appender以下

<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,控制進入我的appender,但當level發生錯誤時,沒有任何記錄在mongoDB中。如果我將級別更改爲調試,我會在mongoDB中看到我的事件 – Anyz

+0

@Anyz您是否有任何錯誤日誌?當您將日誌級別設置爲ERROR時,您只會看到ERROR和FATAL日誌。 –

+0

我想我可能找到了原因。我認爲這與級別沒有任何關係。當我記錄錯誤我沒有那麼多事件去appender,我想連接到我的append()方法中的mongoDB,它在我的mongo寫入失敗。有趣的是,我沒有得到任何錯誤,但我把一些明確的日誌記錄,可以看到它只是停止在我的寫入mongo命令。 – Anyz