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
?
最佳答案
您正在初始化关卡,但并未覆盖 Level 类中的其余方法。因此,当 Logger 调用 CustomeLevel.toLevel(String) 以获取级别的名称时,它将其设置为“FATAL”
查看示例 http://jaitechwriteups.blogspot.com/2006/07/create-your-own-logging-level-in-log4j.html
关于java log4j 日志记录优先级问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368967/