我正在写一个图书馆。该库可供使用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);
}
}
...
}
任何其他评论也表示赞赏。
答案 0 :(得分:3)
选项1:slf4j,根据问题发表评论。
选项2:cxf.apache.org中有这样的设备。我们使用它而不是slf4j,因为slf4j缺乏国际化支持。欢迎您使用该代码。
答案 1 :(得分:1)
请参阅我的评论,但我认为您的包装类将以与其包装的记录器相同的方式使用。在这种情况下,包装类应该为您处理同步。
答案 2 :(得分:0)
如果你刚才使用log4j和util Loggers,我认为你不会遇到任何同步问题。