代码之家  ›  专栏  ›  技术社区  ›  rouble

Java.U.L.日志记录和Java.UTIL日志记录的Java包装器

  •  0
  • rouble  · 技术社区  · 15 年前

    我在写图书馆。该库可由使用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);
            }
        }
        ...
    }
    

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   ghempton    15 年前

    请参阅我的注释,但我假定您的包装类将以与它包装的记录器相同的方式使用。在这种情况下,打包的类应该为您处理同步。

        2
  •  3
  •   bmargulies    15 年前

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

    选项2:cxf.apache.org中包含这样一个设备。我们使用它而不是slf4j,因为slf4j缺乏国际化支持。欢迎您获取代码。

        3
  •  0
  •   Kaleb Brasee    15 年前

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