我正在编写一个由多个maven模块组成的应用程序。所有这些都必须将内容记录到他们自己的日志文件中。我在每个模块的main / resources文件夹中创建了一个log4j.properties文件。现在,当我从其中一个模块启动应用程序时,它会将所有内容写入该模块的日志文件中。我想知道这是否只是因为它可能从该启动模块获取了root-dir并使用它来保存日志文件,但是当我为该启动模块创建一个appender(使用log4j属性中的类别)时没有rootLogger它给我一个关于其他模块中无法找到其appender的类的错误,这表明找不到或读取了每个模块中的log4j.properties文件。任何想法如何解决这个问题并使这些模块使用这些属性文件,或者我必须将所有的appender放在一个大的log4j.properties文件中,导致所有日志出现在该start-module的根文件夹中而不是那些其他模块的根文件夹?
我希望这个问题清楚明白,否则请随时询问详情。
答案 0 :(得分:0)
据我所知,默认情况下只读取并初始化被调用模块的log4j.properties。
如果要从单个启动模块调用单独的模块,则必须将所有appender添加到位于start-module / src / main / resources目录中的单个log4j.properties文件中。如果你想要这可能是一个架构问题。
只是一个建议:如果您现在或将来想要更高级的日志记录控件,请立即切换到基于XML的日志记录。
答案 1 :(得分:0)
如果在每个单独模块的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。然后,如果您有另一个模块将以前的项目作为依赖项使用,那么您只能将其作为依赖项添加为着色项。
然而,这是我不会使用的解决方案。
希望有所帮助。