有没有什么方法可以创建一个可重复使用的日志项目,用于web应用程序



我想知道我是否可以在eclipse中创建一个项目,或者是否可以在任何Java IDE中编写log4j初始化代码并将其保存为项目,这样我就可以在任何工作区中导入它。我知道如何配置servlet,在该servlet中,我在init()方法中初始化记录器并在启动时加载servlet,但这需要web-xml中的一个条目,该条目会根据应用程序的不同而变化。

有没有任何方法可以创建一个不需要依赖DD的可恢复项目?

我知道如何配置servlet,在该servlet中,我在init()方法中初始化记录器,并在启动时加载servlet。。。

可能还有更好的方法。

例如,我在servlet(使用Tomcat)上配置log4j的方法是简单地将"log4j.properties"文件放在类路径上;例如,在"…/webapps/MyApp/WEB-INF/classes/"中。Log4j用于定位日志属性的默认策略将在那里找到它。。。而无需编写任何Java代码。

从Java代码配置日志记录系统(IMO)是个坏主意,因为这意味着您必须更改、重建和重新部署Java代码才能调整日志记录。

除了@Stephen C的回答之外,一些应用程序服务器已经提供了预定义的日志配置。如果您使用JBoss,它已经在一个名为jboss-log4j.xml的文件中有了自己的log4j配置,该文件定义了一个标准配置,您可以根据自己的需要进行调整。

除此之外,我建议将配置与您的应用程序捆绑在一起,如另一个答案中所述。

更聪明、更灵活的是在应用程序中使用日志包装器,它将从底层日志框架中抽象出来。看看这些:

  • SLF4J(首选):http://www.slf4j.org/
  • 公用日志记录:http://commons.apache.org/logging/

如果你使用其中一个,你可以将它们配置为使用你部署到的服务器的日志框架。许多流行的开源框架都出于类似的原因使用这些日志包装器框架。看看它们,然后采用一个作为您的标准-我强烈推荐SLF4J。

在web应用程序中使用日志框架的主要问题之一是,您通常最终想要写入文件,而这在servlet API中是不允许的,这会导致您变得微妙地依赖于供应商,无法很好地使用多计算机部署。

我强烈建议您考虑将代码转换为使用SLJF4进行实际日志记录语句,因为它允许您进行

  • 变得后端独立
  • 使用"{}"占位符可以简单地编写log.debug("a={}, b={}", a, b),并避免在不添加保护if log.debugging-enabled语句的情况下未启用调试日志时可能昂贵地生成实际日志记录字符串

这两件事足以让我改变主意。

处理日志记录的一个非常有趣的方法是使用java.util.logging桥将所有日志语句发送到大多数web容器处理的java日志系统。然后web容器为您完成所有工作,您可以使用供应商工具来调查日志文件。非常有用!

最新更新