我正在使用My WebMethods Server,它是一個servlet容器。 MWS缺省日誌記錄實現是log4j,所以我可以在我的項目中不包含任何jar的情況下使用它。 由於MWS Root Logger與所有包含的應用程序和服務器實例本身交叉,因此我不應該使用它。相反,我的方法是爲每個應用程序創建一個新的Logger。我在屬性文件中設置Logger名稱,並打算從Servlet的init()
方法中讀取它。 由於logger-name
參數,我想從頁面bean代碼中分離獲取Logger。我一直在想創建一個保存記錄器名稱並獲取Logger實例的Singleton。使用單例獲取log4j Logger實例以隔離記錄器名稱
綜上所述,我已經在做這樣的事情一直在思考:
package com.webmethods.caf.log;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
public class CAFLogger {
private static String appLoggerName;
private static Logger logger;
private CAFLogger() {
}
public static void setLoggerName(String loggerName) {
if (appLoggerName == null) {
appLoggerName = loggerName;
}
}
public static Logger getLoggerInstance() {
if (logger == null) {
logger = LogManager.getLogger(appLoggerName);
}
return logger;
}
}
然後調用從我init()
方法setLoggerName()
和getLoggerInstance()
從頁面豆類。 這是一個非常糟糕的主意嗎?
我一直在閱讀有關的單身話題的其他職位,如下所示:
Benefits of Log4j singleton wrapper?
Log4J: Strategies for creating Logger instances
,但他們都建議使用類名來獲得Logger對象,而我需要使用記錄器名稱。
PS。請原諒我的英語。我很樂意根據您的意見糾正任何錯誤或語法錯誤,並添加任何缺乏的信息。
東西我忘了說的是,大多數類相同的封裝結構,在所有應用中,即以'com.webmethods.caf'開始,儘管他們屬於該應用程序,每個屏幕都有一個包,例如'com.webmethods.caf.screen1'。通過類名來定義類別將會很困難。這就是爲什麼我使用記錄器名稱而不是類來獲取記錄器對象。 – DiegoAlfonso