我在寫一個庫。該庫可以被使用log4j記錄器和java.util.logging記錄器的應用程序使用。圍繞log4j記錄器和java.util.logging的java包裝
所以,我寫了一個快速封裝類,封裝了兩個記錄器。我允許應用程序設置一個或兩個記錄器。在我的庫中,我使用封裝的類打印到記錄器。
我的問題是,因爲許多線程可以同時使用包裝類的相同實例來使用類的方法(例如:下面的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);
}
}
...
}
其他意見也讚賞。
在繼續使用此庫之前,您應該檢出slf4j。它包裝了所有主要的日誌庫,並且質量非常高。 – ghempton 2009-11-20 01:10:26
看起來非常好,但我不能在我的庫中使用任何外部庫 – rouble 2009-11-20 01:12:13
嗯,外部是如何外部的?那麼log4j不是外部庫嗎?這種對「外部」庫的反感來自哪裏? – BalusC 2009-11-20 01:13:50