我有一个简单的spring boot JAR应用程序,它使用自定义日志记录库。 (log4j2顶部的扩展名)。 log4j2.xml元素Configuration的名称为" package"可以找到appender的地方。
此自定义日志记录库可以与其他.war,.jar文件和除spring引用之外的其他独立java实现一起使用。
正如Spring引导文档所说,我已将log4j2.xml添加到其类路径中,当我在eclipse IDE上运行它时,它按预期工作。
然而,当我尝试使用时,使用uber jar找到log4j2.xml但是找不到自定义日志库,即使jar在最终打包的jar的lib文件夹中也是如此。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.2.4.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
我检查了在uber jar和eclipse ide之间发生的类加载的顺序,区别在于uber jar只是加载核心log4j库并开始在加载自定义appender之前读取XML。所以classnotfound异常并没有记录。
当eclipse加载lib文件夹中的所有内容时。
我将appender代码从日志jar转移到我的spring boot项目,它可以工作。将appender捆绑到一个罐子里并通过POM引用它并不起作用。
我们也使用JarLauncher配置,理想情况下应该从lib文件夹加载所有内容。
这是我遇到同样问题的最近链接,
http://www.widecodes.com/CJVVWXXgkq/how-to-create-custom-appender-for-log4j2-in-spring.html
但看起来开发人员在他的工作区而不是罐子里有appender。 :-(。哪个适合我。
我是springboot的新手,我如何进行日志记录工作? 提前谢谢。
答案 0 :(得分:0)
我找到了解决方案,问题不在于spring boot,而在于自定义日志记录api的构建方式。它是使用-proc:none编译器参数构建的,其中dint允许构建log4j注释。构建时的log4j2注释会创建一个缺少的log4j2Plugin.dat。
虽然log4j2文档没有详细说明那部分,但是stackoverflow让用户谈论.dat文件。
一旦参数从自定义日志记录组件中删除并构建,并且spring引导项目是使用新构建的日志记录组件构建的,spring boot就能够找到appender并加载它。
不确定为什么mvn spring-boot:run让它工作,(可以理解的是eclipse)但不是java -jar。此自定义appender也适用于其他war / stand alone jar应用程序,为什么单独的spring boot必须遇到问题。我接受它,它是不同的类加载器。