java - 如何在没有日志框架包依赖的情况下进行日志记录?

标签 java logging

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

我不想执行以下操作:

  • 将记录器作为参数传递
  • 将记录器作为依赖项
  • 对非异常的事情抛出异常(例如 INFO 或 WARN 级别的日志记录)

无论如何,我可以在没有记录器作为包的依赖项的情况下进行日志记录,但当它位于类路径上时,它仍然使用 log4j。

最佳答案

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

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

如果您毫无异常(exception)地返回了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.");
    }
}

关于java - 如何在没有日志框架包依赖的情况下进行日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25176547/

相关文章:

Java main 未运行 <已终止>

java - Android Studio 签名 APK - 缺少强制 list 版本属性

java - 在 Java 7 源代码级别编译 GWT 2.6.1

java - 在 CloudFoundry 记录器日志中保留原始控制台颜色

python - 如何格式化日志记录级别的名称

java - java中double 0.0是大于还是小于0

java - Android 多模块项目因 TypeNotPresentException 而失败

java - 如何使用 java.util.logging.Logger 更改特定包的日志记录级别

iis - 创建仪表板来分析 IIS Web 流量

django - 如何在 Django 中记录请求和响应?