2010-10-01 54 views
5

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

我希望这个问题已经足够清楚了解,否则请随时询问详情。

+1

你可以提供更多关于你的应用程序的信息;例如它是一个网络应用程序?它是否部署到应用程序服务器? – Qwerky 2010-10-01 14:56:44

+0

这个应用程序将每周运行以更新包含蛋白质数据的数据库。首先它会检查其他数据库中是否有新数据,如果存在,它会读取数据,并使用它进行一些计算(将数据发送到执行计算的特殊Web服务),然后从该Web服务获取数据,然后将它输入我的蛋白质数据库。其中一个模块是与我的数据库交谈的休眠模块。我遇到的问题是,休眠类记录它所做的一切。我想将这些日志从其他模块的日志中分离出来。 – FinalArt2005 2010-10-04 10:33:32

回答

0

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

如果要从单个启动模块调用独立模块,则必须将所有appender添加到位于start-module/src/main/resources目录中的单个log4j.properties文件。如果和当你想要这可能是一个架构问题。

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

0

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

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

  • 不适用于您的情况。

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

一种不同的解决方案可以是使另一个模块产生阴影(http://maven.apache.org/plugins/maven-shade-plugin/)罐子从其余的模块,包括在SRC /主/资源的单个log4j.properties文件。然后,如果您有另一个模块将您以前的项目用作依赖项,则只能将其作为依赖项包含在阴影项中。

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

希望有所帮助。