我想继承以扩展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
构造函数会构建一些不执行任何日志记录的内容。
答案 0 :(得分:1)
不幸的是,这意味着我必须为我想要使用的每个Logger方法实现一个包装器方法。 (打字太多了。)
无需这样做,已经完成了。看看SLF4J和Commons Logging,它们为java.util.logging提供了合理的包装,隐藏了该API的可怕性。
这两个API也可以委托给适当的底层日志实现,例如Logback或Log4J,完全绕过java.util.logging。