0

我想继承来扩展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()只是返回一个空值。如果第二super(name, resourceName)个参数是 ,则构造函数构建不做任何日志记录的东西null

4

1 回答 1

1

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

不需要这样做,已经完成了。看看SLF4JCommons Logging,它们为 java.util.logging 提供了合理的包装,隐藏了该 API 的糟糕之处。

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

于 2011-11-01T09:08:13.053 回答