将Java.logging扩展到另一个日志级别? [英] Extend Java.logging for another log level?

查看:144
本文介绍了将Java.logging扩展到另一个日志级别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道,是否有可能将标准的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆