将 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
所以不知何故我的扩展失败了。有什么想法我想念的吗?
我想知道是否可以将标准 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 所以不知何故我的扩展失败了。有什么想法我想念的吗?