2013-07-06 84 views
3

我使用在Tomcat 6.0應用程序中運行的Netty 4.0(CR9)。我正在使用Log4J到Slf4J。我的應用程序中的所有Componentes使用Log4J,desipte Netty。我在啓動過程中會收到以下消息:Netty 4.0和Log4J

log4j:WARN No appenders could be found for logger (io.netty.util.internal.logging.InternalLoggerFactory). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
  • 我已經做在我的應用程序的資源文件夾指定的log4j.xml(因此其他COMPONENTES知道怎麼登錄)
  • 我試圖把「InternalLoggerFactory .setDefaultFactory(new Slf4JLoggerFactory());「或「InternalLoggerFactory.setDefaultFactory(new Log4JLoggerFactory());」在WebApp的ContextListener中在啓動時配置記錄器。將它們放入靜態上下文也不起作用。
  • 在Intitalizer中添加記錄處理程序不起作用。

我有下面的代碼行中啓動監聽

SLF4JBridgeHandler.removeHandlersForRootLogger(); 
SLF4JBridgeHandler.install();" 

像我一樣需要他們澤西島corretly使用SLF4J。

我已經有一個看看下面的問題,這些問題並沒有解決我的問題

回答

1

我找到了解決我的這個問題的問題:Where to place log4j.xml。如果您使用「-Dlog4j.debug」作爲構建Web應用程序的參數,它會顯示您使用哪些appender。

在我的情況下,問題是log4j.xml被正確找到,但一個不正確的版本。 (缺少正確的appender)。通過將appender添加到log4j使用的版本中,它可以工作。

我追加程序看起來像

<category name="io.netty"> 
    <priority value="warn"/> 
    <appender-ref ref="Console"/> 
</category> 
+0

對於Log4J 2.x:''' ''' –

0

對任何人說是程序化地配置自己的日誌記錄(爲我,爲的一些單元測試的緣故),可能不希望有去建立一個log4j.xml

在Netty的情況下,一些類嘗試在類加載階段訪問它們的Logger,所以你將不得不確保你想要做的任何編程初始化事先發生。例如,如果你聲明一個Netty靜態成員,確保你的靜態初始化事先發生(類中的成員的排序是相關的),例如,

static { 

    Logging.initialise(); 
} 

static ByteBufAllocator alloc = new UnpooledByteBufAllocator(true); 

如果你不想去觸摸和落實計劃採伐一種常見的實用類後來在初始化你也許可以設定一個附加器:

static { 

    /* Eliminate Log4j warning when instantiating 'alloc' below */ 
    Logger rootLogger = Logger.getRootLogger(); 

    /* Check that an appender hasn't already been set */ 
    if (!rootLogger.getAllAppenders().hasMoreElements()) { 

     rootLogger.addAppender(new NullAppender()); 
    } 
} 

static ByteBufAllocator alloc = new UnpooledByteBufAllocator(true); 

注意的是,如果Appender已經設置好了,不要做任何事情,因爲在這種情況下,假設有人在其他地方配置它是安全的。