我想知道,是否可以将标准java logger(java.util.logging.Logger;)扩展为另一个记录器级别。
目标是,应该出现" ERROR"而不是" SEVERE"在日志文件中。
这可能吗? 或者我必须使用不同的记录器(例如Log4j)?
非常感谢!
答案 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 所以我的扩展失败了。我缺少什么想法?