首页 文章

Spring启动自定义 Logger log4j2

提问于
浏览
1

我有一个简单的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 回答

  • 0

    好吧,我找到了解决方案,问题不是 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必须遇到问题 . 我接受它,它是不同的类加载器 .

相关问题