我有一个简单的spring boot JAR应用程序,它使用自定义日志记录库 . (log4j2顶部的扩展名) . log4j2.xml元素Configuration具有可以找到appender的“package”的名称 .
此自定义日志记录库可与其他.war,.jar文件和除spring引用之外的其他独立Java实现一起使用 .
正如Spring boot文档所说,我已将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捆绑到jar中并通过POM引用它是行不通的 .
我们也使用JarLauncher配置,理想情况下应该从lib文件夹加载所有内容 .
这是我遇到同样问题的最接近的链接,
http://www.widecodes.com/CJVVWXXgkq/how-to-create-custom-appender-for-log4j2-in-spring.html
但看起来开发人员在他的工作区而不是 jar 里有了appender . :-( . 哪个适合我 .
我是springboot的新手,我如何进行日志记录工作?提前致谢 .
1 回答
好吧,我找到了解决方案,问题不是 spring 启动,而是自定义日志记录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 jar应用程序,为什么单独的spring boot必须遇到问题 . 我接受它,它是不同的类加载器 .