【问题标题】:java wrapper around log4j logger and java.util.logging围绕 log4j 记录器和 java.util.logging 的 java 包装器
【发布时间】:2010-12-18 13:42:39
【问题描述】:

我正在编写一个库。该库可供使用 log4j 记录器和 java.util.logging 记录器的应用程序使用。

所以,我编写了一个快速包装类,它封装了两个记录器。我允许应用程序设置一个或两个记录器。在我的库中,我使用封装的类打印到任一记录器。

我的问题是,由于许多线程可以同时使用包装类的同一个实例来使用类的方法记录消息(例如:下面的 fatal()),应该采取哪些步骤来使这些方法线程安全?

public class MultiLogger {
    private static org.apache.log4j.Logger _log4jLogger = null;
    private static java.util.logging.Logger _javaUtilLogger = null;

    private MultiLogger () {
    }

    // log4j FATAL, log util SEVERE
    public void fatal (Object message) {
        if (_log4jLogger != null) {
            _log4jLogger.log("", Level.FATAL, message, null);
        }

        if (_javaUtilLogger != null) {
            _javaUtilLogger.severe((String) message);
        }
    }
    ...
}

任何其他 cmets 也很感激。

【问题讨论】:

  • 在继续使用这个库之前,您应该查看 slf4j。它包含所有主要的日志库,质量非常高。
  • 看起来不错,但我的库中无法使用任何外部库
  • 呃,外部是多少?那么 log4j 不是外部库吗?这种对“外部”库的厌恶从何而来?
  • 天哪,需要多少个日志库和包装器?就个人而言,我认为这很荒谬。

标签: java logging log4j thread-safety java.util.logging


【解决方案1】:

选项 1:slf4j,根据问题的评论。

选项 2:cxf.apache.org 中有这样的设备。我们使用它来代替 slf4j,因为 slf4j 缺乏国际化支持。欢迎大家抢码。

【讨论】:

    【解决方案2】:

    看我的评论:

    在继续使用此库之前,您应该查看 slf4j。它包含了所有主要的日志库,并且质量非常高。

    但我认为您的包装器类将以与它包装的记录器相同的方式使用。在这种情况下,包装类应该为您处理同步。

    【讨论】:

      【解决方案3】:

      如果您只是使用如上所示的 log4j 和 util Loggers,我认为您不会遇到任何同步问题。

      【讨论】:

        猜你喜欢
        • 2011-01-16
        • 2023-03-17
        • 2018-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        相关资源
        最近更新 更多