2010-04-09 35 views
1

我使用一个包装类A的初始化java.util.logger程序的Java记录仪使用Servlet

static class A { 

    public static Logger logger; 

    public static void init(){ 

    logger = Logger.getLogger("test"); 

} 

现在,到处都在我的节目,我叫A.init(),然后logger.log(“消息+ uniqid“)。 但最近我转移到HTTP servlets,我遇到了问题。

基本上,如果一个应用程序已经在运行,并且记录器记录......和别人再次运行应用程序,从以前的实例记录器停止,并开始记录的第二个。任何人都可以有解决方案,我应该如何解决这个静态变量问题?

我可以通过记录到的所有构造函数的类但那是很乏味。任何更好的解决方案,将不胜感激..

+0

Didnt完全看你的问题,但我可以推荐你的log4j。 – DarthVader 2010-04-09 18:35:39

回答

0

是从来没有使用上的web应用静态的,什么user177883说使用Log4j它是登录状态,这样很好地解决何苦把它从头

2

你不需要写初始化您的记录器多次。

实际上,您甚至不需要手动执行此操作,因为您可以创建一个带配置信息的属性文件,并将其以部署到您的应用程序服务器中的WEB-INF/classes文件夹的方式放到特定目录中。

在配置文件(properties-file)中,您可以定义不同的写日志方式。然后,当你想要写一些Servlet记录,例如UserCounterServlet,你应该做的:

private static final Logger logger = Logger.getLogger (UserCounterServlet.class); 
... 
logger.info("some info"); 
+0

但我希望将日志写入一个文件中......所以,我必须始终添加文件处理程序... – Sunny 2010-04-09 19:10:15

+0

您的日志记录程序配置文件进入WEB-INF/classes/log4j.xml。该文件会告诉你想记录你的日志中的文件的log4j 另外,我认为这是稍微好一点的说'getLogger(UserCounterServlet.class);'因为这时如果你犯了一个错字,你的IDE会让你知道。 – John 2010-04-10 02:32:18

+0

@John:关于UserCounterServlet.class - 你确定无疑是正确的。 – Roman 2010-04-10 07:42:48

0

如果你想在Servlet中真正的好记录解决方案,不要用一个静态的记录(即使你知道一些着名的基于servlet的项目使用这种记录方式)。使用时考虑到Web应用程序开发权记录解决方案(例如的logback - log4j的提前,或者等等)