将 Java.logging 扩展到另一个日志级别?

Extend Java.logging for another log level?

我想知道是否可以将标准 java 记录器 (java.util.logging.Logger;) 扩展到另一个记录器级别。

目标是在日志文件中显示 "ERROR" 而不是 "SEVERE"。

这可能吗? 还是我必须改用其他记录器(例如 Log4j)?

非常感谢!

如果您只想打印与标准不同的内容,您可以设置自己的格式化程序,请参阅 http://tutorials.jenkov.com/java-logging/formatters.html

如果你想添加一个额外的日志级别,你可以通过继承 java.util.logging.Level:

public class MyErrorLevel extends java.util.logging.Level {
    public MyErrorLevel() {
        super("ERROR", 1000);
    }
}

好的,Andreas Vogler 的版本有效。创建这个 class:

public class MyErrorLevel extends java.util.logging.Level 
{
    public MyErrorLevel() 
    {
        super("ERROR", 1000);
    }
}

要在您的 运行 程序代码中使用它,您必须这样做:

logger.log(new MyErrorLevel(),"My Error number one");



如果您需要多个错误级别,您可以这样做:

public class MyErrorLevel extends Level
{

public static MyErrorLevel ERROR = new MyErrorLevel ("ERROR", 950);
public static MyErrorLevel SERIOUS_ERROR = new MyErrorLevel("SERIOUS_ERROR", 980);
//...and so on...

private MyErrorLevel(String name, int value)
    {
        super (name, value);
    }

}

在你的程序代码中,你可以这样使用:

logger.log(MyErrorLevel.ERROR, "my other error");
logger.log(MyErrorLevel.SERIOUS_ERROR, "my significant Error");



现在,如果您不想每次都指定自己的 classname (MyErrorLevel.SERIOUS_ERROR),而是想使用 'standard-methods'(例如像已经存在的方法logger.info("my information"))你可能会考虑用新方法扩展记录器本身。这应该(据我所知)基本上是这样工作的:

public class MyLogger extends Logger
{

public MyLogger(String name, String resourceBundleName)
    {
        super(name, resourceBundleName);    
    }

public void error(String msg)
    {
        super.log(MyErrorLevel.ERROR, msg);
    }
public void error(String msg)
    {
        super.log(MyErrorLevel.SERIOUS_ERROR, msg);
    }
}

现在您应该可以像这样在代码中调用这些方法了:

myLogger.error("my error")
myLogger.seriousError("my serious error")

但我做不到: 我无法用以下方法初始化我自己的记录器:

MyLogger myLogger = MyLogger.getLogger("MyModifiedLogger");

由于类型不匹配而无法编译(无法从记录器转换为 MyLogger)。 我也试过:

MyLogger myLogger = (MyLogger)Logger.getLogger("MyModifiedLogger");

这会导致在 运行 时出现错误消息: java.util.logging.Logger 无法转换为 utility.MyLogger 所以不知何故我的扩展失败了。有什么想法我想念的吗?