【问题标题】:Spring boot custom logger log4j2Spring Boot 自定义记录器 log4j2
【发布时间】:2015-09-29 05:36:01
【问题描述】:

我有一个简单的 Spring Boot JAR 应用程序,它使用自定义日志库。 ( log4j2 之上的扩展)。 log4j2.xml 元素配置具有“包”的名称,可以在其中找到附加程序。

这个自定义日志库可以很好地与其他 .war、.jar 文件和除 spring boot 之外的其他独立 java 实现配合使用。

正如 Spring Boot 文档所说,我已将 log4j2.xml 添加到其类路径中,当我在 Eclipse IDE 上运行它时,它按预期工作。

但是,当我尝试使用 uber jar 构建 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 文件夹中的所有内容时。

我将附加程序代码从日志记录 jar 移动到我的 Spring Boot 项目中,它可以工作。将 appender 捆绑到一个 jar 中并通过 POM 引用它是行不通的。

我们还使用了 JarLauncher 配置,理想情况下应该从 lib 文件夹中加载所有内容。

这是我遇到相同问题的最接近的链接,

http://www.widecodes.com/CJVVWXXgkq/how-to-create-custom-appender-for-log4j2-in-spring.html

但看起来开发人员在他的工作区中使用了 appender 而不是 jar。 :-(。这对我有用。

我是 springboot 的新手,如何使日志记录工作? 提前致谢。

【问题讨论】:

    标签: logging spring-boot log4j2 classnotfound


    【解决方案1】:

    好吧,我找到了解决方案,问题不在于 Spring Boot,而在于自定义日志记录 API 的构建方式。它是使用 -proc:none 编译器参数构建的,它允许构建 log4j 注释。构建时的 log4j2 注释会创建一个丢失的 log4j2Plugin.dat。

    虽然 log4j2 文档没有详细说明该部分,但正是 stackoverflow 让用户谈论了 .dat 文件。

    一旦从自定义日志组件中删除并构建了参数,并且使用新构建的日志组件构建了 spring boot 项目,spring boot 就能够找到 appender 并加载它。

    不知道为什么 mvn spring-boot:run 让它工作,(可以理解的 eclipse 做了)但不是 java -jar。此外,此自定义附加程序已与其他战争/独立 jar 应用程序一起使用,为什么单独使用 spring boot 必须有问题。我接受它,它是类加载器的工作方式不同。

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 2018-09-17
      • 2017-12-20
      • 2014-10-30
      • 2021-11-19
      • 2020-08-02
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多