【发布时间】: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