【问题标题】:Is there any way I can create a reusable logging project for use in web-applications?有什么方法可以创建一个可重用的日志项目以用于 Web 应用程序?
【发布时间】:2012-04-02 05:54:05
【问题描述】:

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

我有什么方法可以创建一个不需要依赖 DD 的 resuable 项目吗?

【问题讨论】:

  • 在标准位置需要哪些具体步骤?
  • @Stephen - 部署描述符* :)
  • @ThorbjørnRavnAndersen - 我的意思是在eclipse中创建新项目时我应该选择什么type以及我应该如何写作代码?
  • 如果他们想让其他程序员理解它们,大多数人会说“web.xml 文件”。

标签: java eclipse log4j


【解决方案1】:

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

可能有更好的方法。

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

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

【讨论】:

  • 所以你的意思是我只是创建了log4j.propertieslog4j.xml 文件,按照我想要的方式配置它,然后将它添加到我的类路径中?
  • 是的。不过,对于迂腐来说,我特别指的是 web 应用程序在 web 容器中部署时的类路径。 [[如果“你”有一个类路径,人们会注意到你的眼睛每隔几分钟就会在你的大脑垃圾收集时发呆:-)]]
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    • 成为后端独立。
    • 使用“{}”占位符来简单地编写 log.debug("a={}, b={}", a, b) 并避免在未启用调试日志的情况下生成实际日志记录字符串可能代价高昂,而无需添加保护 if log.debugging-enabled 语句。

    这两个一直是我切换的理由。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 2022-01-10
      • 2022-01-13
      相关资源
      最近更新 更多