java log4j记录优先级问题

时间:2011-03-20 14:08:48

标签: java java-ee log4j


log4j的Level类具有以下构造函数:

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

我的问题是,何时使用String levelStr参数?
我已经定义了自己的自定义appender,并在其中定义了自定义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何时使用?

2 个答案:

答案 0 :(得分:1)

您正在初始化级别,但您没有覆盖Level类中的其余方法。因此,当Logger调用CustomeLevel.toLevel(String)来获取级别的名称时,它将其设置为“FATAL”

查看示例 http://jaitechwriteups.blogspot.com/2006/07/create-your-own-logging-level-in-log4j.html

答案 1 :(得分:0)

我很确定它与此有关:

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

您正在使用FATAL_INT的值初始化级别。然后,库假设您的自定义级别必须是内置的FATAL级别。我会尝试提供,例如改为DEBUG_INT + 1。