java log4j 日志记录优先级问题

标签 java jakarta-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

最佳答案

您正在初始化关卡,但并未覆盖 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/

相关文章:

java - 删除行时Jtable刷新

java - 在 Java 中,当对象实例化失败时会发生什么?

java - 使用 JPA 工具进行对象关系映射 : Generate Tables from Entities feature

logging - 将日志输出发送到 grails 1.3.2 中的不同文件

jboss 作为 5.1 logback slf4j log4j

log4j - Hadoop 启用日志记录

java - 使用 Spring 和 JWT 基于 token 的身份验证

java - 创建 Java(桌面版)抽认卡程序

java - 在ServiceLayer中获取ServletContext

JSF 2.0 : use Enum values for selectOneMenu