我从jar
获取了使用java.util.logging.Logger
。
Jar包含大约1000个记录器用法,每个类从以下开始:
private static final Logger LOG = Logger.getLogger(SomeClass.class.getName());
我想处理那里的所有日志,意味着将它们指向我的Logger使用情况,而不是java.util.logging.Logger
。
因此我写了自己的记录器。
所以相反:
LOG.log(Level.SEVERE, "Error sleeping", e);
我可以写:
MyLogger.toLog(TLogLevel.WFS_ERROR, "Monkey", "Error sleeping", e );
问题是我需要遍历所有java文件并替换为我的。
凌乱的方式,嗯
有没有人知道如何通过简单的方法将java.util.logging.Logger
转换为com.boo.MyLogger
?
谢谢,
答案 0 :(得分:6)
SLF4J项目有a jul-to-slf4j bridge,可用于将java.util.logging.Logger调用重定向到SLF4J。您可以使用它(通过使您的MyLogger实现SLF4J定义的接口)。
但是,请注意,与所有其他日志记录库不同,j.u.l。已经硬连接到Java类库中,并且在没有性能损失的情况下无法桥接。
另外,我不知道你在使用MyLogger做什么,但通常不需要自己编写。有很多日志记录实现可供选择,它们可以通过多种不同方式进行配置。即使您必须编写自己的Logger 实现,也应该使用现有的接口(例如SLF4J,这些日子似乎最受欢迎)。
答案 1 :(得分:2)
看看SLF4J:
简单日志外观Java或(SLF4J)就像一个简单的 各种日志框架的外观或抽象,例如, java.util.logging,log4j和logback,允许最终用户插入 部署时所需的日志框架。
然后,您可以使用logback(同一作者)使用已有的各种网桥登录到通用日志框架。或者,编写自己的,但无论哪种方式,您都不必担心替换所有代码......
答案 2 :(得分:2)
Oracle的Java 7 Logger是可配置的,它的实现很简单:
public static Logger getLogger(String name) {
// This method is intentionally not a wrapper around a call
// to getLogger(name, resourceBundleName). If it were then
// this sequence:
//
// getLogger("Foo", "resourceBundleForFoo");
// getLogger("Foo");
//
// would throw an IllegalArgumentException in the second call
// because the wrapper would result in an attempt to replace
// the existing "resourceBundleForFoo" with null.
LogManager manager = LogManager.getLogManager();
return manager.demandLogger(name);
}
所以你也可以通过代码设置一个日志级别;除了陈述性。
LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME).setLevel(Level.INFO);
Lars Vogel有一个很好的页面,也有自己的Logger类。
所有放在一起是非常可行的,但有时可能有点难以理解。