如何在不依赖于日志框架包的情况下进行日志记录



我有一个实用程序包,它没有意义有log4j作为一个依赖,但是有一些静态方法,我仍然想做一些日志记录。

我不希望做以下事情:

  • 将记录器作为参数传入
  • 将记录器作为依赖项
  • 抛出异常的事情不是异常(想想INFO或WARN级别的日志)

是否有任何方式,我可以做日志没有logger作为包的依赖,但它仍然使用log4j时,它的类路径。

您可以使用以下命令检查log4j是否在类路径上:

Class.forName("org.apache.log4j.Logger");

如果您没有异常地获得Class,则可以继续创建一个日志记录器并使用它。

下面是一个采用这种方法的完整示例类。请注意,您仍然需要log4j来编译您的类,因为您引用了log4j Logger,但是您可以在类路径上使用或不使用log4j的代码。

class YourUtil {
    private static final Logger LOGGER;
    static {
        Class<?> clazz = null;
        try {
            clazz = Class.forName("org.apache.log4j.Logger");
        } catch (ClassNotFoundException e) {}
        LOGGER = clazz == null ? null : Logger.getLogger("com.foo.YourUtil");
    }
    public static void doSomething() {
        // To log something:
        if (LOGGER != null)
            LOGGER.info("Logging using log4j.");
    }
}

相关内容

最新更新