【问题标题】:Log4j properties from each module每个模块的 Log4j 属性
【发布时间】:2011-04-19 20:39:02
【问题描述】:

我正在编写一个由多个 Maven 模块组成的应用程序。他们都必须将内容记录到自己的日志文件中。我在每个模块的 main/resources 文件夹中创建了一个 log4j.properties 文件。现在,当我从其中一个模块启动应用程序时,它会将所有内容写入该模块的日志文件。我想知道这是否只是因为它可能从该启动模块中获取了根目录并使用它来保存日志文件,但是当我为该启动模块创建一个附加程序时(使用 log4j 属性中的类别)和no rootLogger 它给了我一个关于其他模块中找不到其附加程序的类的错误,这表明未找到或读取每个模块中的 log4j.properties 文件。任何人都知道如何解决这个问题并让这些模块使用这些属性文件,或者我是否必须将所有附加程序放在一个大的 log4j.properties 文件中,导致所有日志出现在该启动模块的根文件夹中,而不是那些其他模块的根文件夹?

我希望问题足够清楚,可以理解,否则请随时询问详细信息。

【问题讨论】:

  • 你能提供更多关于你的应用的信息吗?例如,它是一个网络应用程序吗?是否部署到应用服务器?
  • 这个应用程序将每周运行以更新包含蛋白质数据的数据库。首先,它检查其他几个数据库中是否有新数据,如果有,它会读取该数据,对其进行一些计算(通过将其发送到进行计算的特殊 Web 服务)从该 Web 服务中取回数据,然后将其输入我的蛋白质数据库。其中一个模块是与我的数据库对话的休眠模块。我遇到的问题是休眠类型会记录它所做的一切。我想将这些日志与其他模块的日志分开。

标签: java properties log4j maven


【解决方案1】:

如果您在每个单独模块的 src/main/resources 中包含单独的 log4j.properties 并将生成的 jar 文件加载到单个类加载器中,则只会加载一个资源,因为 log4j 从类加载器加载属性文件(您的资源在文件名中重叠)。

我不会在我的 任何 jar 文件中包含 log4j.configuration 文件。有两个原因:

  • 不适用于您的情况。

  • 为了配置 log4j(编辑记录器的详细程度),我必须打开 jar 文件并编辑属性文件。

一个不同的解决方案可以是让另一个模块从其余模块生成一个阴影 (http://maven.apache.org/plugins/maven-shade-plugin/) jar 文件,包括 src/main/resources 中的单个 log4j.properties。然后,如果您有另一个模块将您以前的项目作为依赖项使用,则只能将阴影部分作为依赖项包含在内。

但是,这是我不会使用的解决方案。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    据我所知,默认情况下只有被调用模块的 log4j.properties 被读取和初始化。

    如果您想从单个启动模块调用单独的模块,您必须将所有附加程序添加到位于 start-module/src/main/resources 目录中的单个 log4j.properties 文件中。如果以及何时需要,这可能是一个架构问题。

    只是一个建议:如果您现在或将来想要更高级的日志记录控件,请立即切换到基于 XML 的日志记录。

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多