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

时间:2015-02-11 09:59:45

标签: java logging extending errorlevel

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

目标是,应该出现" ERROR"而不是" SEVERE"在日志文件中。

这可能吗? 或者我必须使用不同的记录器(例如Log4j)?

非常感谢!

2 个答案:

答案 0 :(得分:1)

如果您只想打印不同于标准的内容,可以设置自己的格式化程序,请参阅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);
    }
}

答案 1 :(得分:1)

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

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

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

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



如果您需要多个errorLevel,可以这样做:

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");



现在,如果您不想每次都指定自己的类名(MyErrorLevel.SERIOUS_ERROR),而是想要使用'标准方法' (例如,像现有方法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");

由于类型不匹配(Cannont从logger转换为MyLogger),因此无法编译。 我也尝试过:

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

这会导致运行时出现错误消息: java.util.logging.Logger无法强制转换为utility.MyLogger 所以我的扩展失败了。我缺少什么想法?

相关问题