Spring启动自定义记录器log4j2

时间:2015-07-10 12:52:35

标签: logging spring-boot log4j2 classnotfound

我有一个简单的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的新手,我如何进行日志记录工作? 提前谢谢。

1 个答案:

答案 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必须遇到问题。我接受它,它是不同的类加载器。