1

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.Loggercom.boo.MyLogger

谢谢,

4

3 回答 3

6

SLF4J 项目有一个 jul-to-slf4j 桥,可用于将 java.util.logging.Logger 调用重定向到 SLF4J。您可以使用它(通过让您的 MyLogger 实现 SLF4J 定义的接口)。

但是请注意,与所有其他日志记录库不同,jul 是硬连接到 Java 类库中的,并且无法在没有性能损失的情况下进行桥接。

另外,我不知道你在用 MyLogger 做什么,但通常不需要自己编写。有很多日志实现可供选择,并且可以通过多种不同的方式进行配置。即使你必须编写自己的 Logger实现,你也应该使用现有的接口(比如现在最流行的 SLF4J)。

于 2013-05-21T12:14:39.877 回答
2

看看SLF4J

Java 或 (SLF4J) 的简单日志外观作为各种日志框架的简单外观或抽象,例如 java.util.logging、log4j 和 logback,允许最终用户在部署时插入所需的日志框架。

使用它,您还可以使用logback(同一作者)使用现有的各种桥接器登录到通用日志记录框架。或者,自己编写,但无论哪种方式,您都不必担心替换所有代码......

于 2013-05-21T12:15:09.700 回答
1

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 类。

所有放在一起是相当可行的,但有时可能有点难以理解。

于 2013-05-21T12:42:11.100 回答