2011-03-20 44 views
4


Level類的log4j的有以下構造函數:java的log4j的日誌記錄優先問題

protected Level(int level, String levelStr,int syslogEquivalent) 

我的問題是,當使用String levelStr參數?
我已經定義了自己的自定義附加目的地,並在其中我已經定義了一個自定義Level如下:

public static class CustomLevel extends Level { 
    private static final long serialVersionUID = 1L; 
    public static final Level ALERT = new CustomLevel(FATAL_INT, "ALERT", 2); 
    protected CustomLevel(int level, String levelStr, int syslogEquivalent) { 
      super(level, levelStr, syslogEquivalent); 
     } 
} 

在我的appender,在append方法我做的:

Level newLevel = CustomLevel.ALERT; 
etc. 

LoggingEvent newLoggingEvent = new LoggingEvent(
      event.getFQNOfLoggerClass(), event.getLogger(), event.getTimeStamp(), newLevel, 
      event.getMessage(), event.getThreadName(), event.getThrowableInformation(), 
      event.getNDC(), event.getLocationInformation(), event.getProperties()); 
super.append(newLoggingEvent); 

在輸出日誌,當我做custom_Logger.fatal(msg);我可以看到我的消息,但水平是FATAL

main FATAL logging.customlog - Send an Error Message to log 

我認爲這將是ALERT在我的自定義級別(即main ALERT)定義。
我在這裏做錯了什麼?我不應該在輸出日誌中看到ALERT
如果不是那麼什麼時候使用leveStr

+4

什麼FATAL_INT的價值爲例級別的名稱?我猜想它可能與致命日誌級別已經使用的不一樣。 – steinar 2011-03-20 14:16:05

+0

@steinar:'FATAL_INT'是'org.apache.log4j.Priority.FATAL_INT' – Cratylus 2011-03-20 15:28:57

回答

0

我敢肯定,它與此有關:

public static final Level ALERT = new CustomLevel(FATAL_INT, "ALERT", 2); 

你初始化與FATAL_INT的價值水平。然後該庫假定您的自定義級別必須是內置的FATAL級別。我會嘗試提供例如改爲DEBUG_INT + 1。

+0

我改成了'new CustomLevel(DEBUG_INT + 1,「ALERT」,2);'但它仍然打印'主要的FATAL logging.customlog - 發送錯誤信息到日誌 – Cratylus 2011-03-20 15:31:41