围绕log4j记录器和java.util.logging的Javapackage器

java wrapper around log4j logger and java.util.logging

我正在写图书馆。使用log4j记录器和java.util.logging记录器的应用程序可以使用该库。

因此,我编写了一个快速package器类,该类封装了两个记录器。我允许应用程序设置一个或两个记录器。在我的库中,我使用封装的类来打印到任一记录器。

我的问题是,由于许多线程可以同时使用package器类的相同实例来使用类的方法来记录消息(例如,下面的fatal()),因此应采取哪些步骤使这些方法成为线程安全的?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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);
        }
    }
    ...
}

任何其他评论也表示赞赏。


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

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


查看我的评论:

You should check out slf4j before you proceed with this library. It wraps all the major logging libraries and is very high quality.

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


假设您仅使用了如上所述的log4j和util Loggers,我认为您不会遇到任何同步问题。