我正在使用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