将Java.logging扩展到另一个日志级别? [英] Extend Java.logging for another log level?
问题描述
我想知道,是否有可能将标准的Java记录器(java.util.logging.Logger;)扩展到另一个记录器级别.
I was wondering, if it is possible to extend the standard java logger (java.util.logging.Logger;) for another logger level.
目标是在日志文件中显示"ERROR"而不是"SEVERE".
The goal is, that there should show up "ERROR" instead of "SEVERE" in the log files.
有可能吗? 还是我必须改用其他记录器(例如Log4j)?
Is that possible? Or do I have to use a different logger instead (e.g. Log4j)?
非常感谢!
推荐答案
好的,Andreas Vogler的版本适用.创建此类:
Ok, Andreas Vogler's version works. Create this class:
public class MyErrorLevel extends java.util.logging.Level
{
public MyErrorLevel()
{
super("ERROR", 1000);
}
}
要在正在运行的程序代码中使用它,您必须这样做:
To use it in your running program code, you have to do it that way:
logger.log(new MyErrorLevel(),"My Error number one");
如果您需要多个errorLevel,可以这样:
If you need more than one errorLevel you can do it that way:
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);
}
}
在程序代码中,您可以像这样使用它:
In your program code, you can use it like this:
logger.log(MyErrorLevel.ERROR, "my other error");
logger.log(MyErrorLevel.SERIOUS_ERROR, "my significant Error");
现在,如果您不想每次都指定自己的类名(MyErrorLevel.SERIOUS_ERROR),而想使用标准方法"(例如,已经存在的方法logger.info("my information")
)您可能会考虑使用新方法扩展记录器本身.就我所知,这应该基本上是这样的:
Now, if you don't want to specify your own classname (MyErrorLevel.SERIOUS_ERROR) everytime and instead you want to use 'standard-methods' (e. g. like the already existing method logger.info("my information")
) you may think about extending the logger itself with new methods. This should (as far as my understanding goes) basically work like that:
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);
}
}
现在,您应该可以像这样在代码中调用以下方法:
Now you should be able to call these methods in your code like that:
myLogger.error("my error")
myLogger.seriousError("my serious error")
但是我无法做到这一点: 我无法使用以下方法初始化自己的记录器:
But I wasnt able to do it: I couldn't initialize my own logger with:
MyLogger myLogger = MyLogger.getLogger("MyModifiedLogger");
由于类型不匹配而无法编译(无法从记录器转换为MyLogger). 我也尝试过:
This doesn't compile because of type mismatch (Cannont convert from logger to MyLogger). I also tried:
MyLogger myLogger = (MyLogger)Logger.getLogger("MyModifiedLogger");
这会在运行时导致错误消息: 无法将java.util.logging.Logger强制转换为Utility.MyLogger 所以我的扩展名以某种方式失败了.有什么想法我想念的吗?
This results in an error message while running: java.util.logging.Logger cannot be cast to utility.MyLogger So somehow my extension failed. Any ideas what I am missing?
这篇关于将Java.logging扩展到另一个日志级别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!