带有Servlet的Java Logger

时间:2010-04-09 18:33:58

标签: java logging servlets

我正在使用一个初始化java.util.logger

的包装器类A.
static class A {

    public static Logger logger;

    public static void init(){

    logger = Logger.getLogger("test");

}

现在,在我的程序中,我调用A.init()然后调用logger.log(“Message + uniqid”)。 但最近我转移到HTTP servlet,我遇到了问题。

基本上,如果某个应用程序已在运行并且记录器正在记录...并且其他人再次运行该应用程序,则前一个实例的记录器将停止并开始记录第二个实例。任何人都可以找到解决这个静态变量问题的方法吗?

我可以将记录器传递给所有构造函数类,但那真的很乏味。任何更好的解决方案将不胜感激..

3 个答案:

答案 0 :(得分:2)

您无需多次初始化记录器。

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

在配置文件(properties-file)中,您可以定义编写日志的不同方法。然后,当你想从某个servlet写日志时,例如UserCounterServlet,你应该这样做:

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

答案 1 :(得分:0)

是的,永远不要在Web应用程序上使用static以及user177883所说的使用log4j它是一个很好的日志记录解决方案,所以为什么还要从头开始编写它

答案 2 :(得分:0)

如果您想在servlet中使用非常好的日志记录解决方案,请不要使用静态记录器(即使您了解一些着名的基于servlet的项目也使用这种日志记录方式)。使用通过Web应用程序开发的正确日志记录解决方案(例如LogBack - log4j的推进等)