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
何时使用?
答案 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。