当您不需要本地化时,是否有一种简约的方法来获取默认的ResourceBundle?

时间:2011-11-01 08:51:54

标签: java logging resourcebundle java.util.logging

我想继承以扩展java.util.logging.Logger。唯一可见的构造函数是

protected Logger(String name, String resourceBundleName)

尽管你想要获得一个实例,但它们提供了两种方式:

static Logger   getLogger(String name)
static Logger   getLogger(String name, String resourceBundleName)  

有没有办法获得某种默认ResourceBundle或默认名称ResourceBundle,以便我可以使用构造函数而无需创建国际化属性文件和关联对象?

当然,我可以简单地生成一个包装类并使用getLogger(String name)来避免使用ResourceBundle名称。不幸的是,这意味着我必须为我想要使用的每个Logger方法实现一个包装器方法。 (打字太多了。)

编辑:以下尝试从Logger获取默认本地化数据不起作用。

import java.util.logging.Logger;

class JLogger extends Logger
{
    static Logger dummyLogger = Logger.getLogger("com.dummy.utilities");

    private JLogger(String name)
    {
        super(name, JLogger.dummyLogger.getResourceBundleName());
    }

    static JLogger getJLogger(String name)
    {
        return new JLogger(name);
    }

    public void severe() // a zero arguments version of severe
    {
        severe("");
    }
}

getResourceBundleName()只返回null。如果第二个参数是super(name, resourceName)null构造函数会构建一些不执行任何日志记录的内容。

1 个答案:

答案 0 :(得分:1)

  

不幸的是,这意味着我必须为我想要使用的每个Logger方法实现一个包装器方法。 (打字太多了。)

无需这样做,已经完成了。看看SLF4JCommons Logging,它们为java.util.logging提供了合理的包装,隐藏了该API的可怕性。

这两个API也可以委托给适当的底层日志实现,例如Logback或Log4J,完全绕过java.util.logging。

相关问题