无法使用自定义日志处理程序java.util.loggingspringboot

如何解决无法使用自定义日志处理程序java.util.loggingspringboot

我遇到了 springboot 应用程序的一个日志问题。 无法加载自定义日志处理程序(ClassNotFoundException)。

Spring Boot Uber jar 配置

<plugin>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-maven-plugin</artifactId>
                            <configuration>
                                    <mainClass>test.DigRunner</mainClass>
                                    <layout>JAR</layout>
                            </configuration>
                            <executions>
                                    <execution>
                                            <goals>
                                                    <goal>repackage</goal>
                                            </goals>
                                    </execution>
                            </executions>
                    </plugin>

这是spring应用程序的启动脚本

exec ${JVM_PATH} -Djava.util.logging.config.file=/temp/logging.properties -jar service.jar

Logging.properties

 handlers=utilities.enhancedlogger.handler.file.RollingDayBufferedFileHandler,utilities.enhancedlogger.handler.file.RollingDayFileHandler
level=SEVERE

utilities.enhancedlogger.handler.file.RollingDayBufferedFileHandler.level=INFO
utilities.enhancedlogger.handler.file.RollingDayBufferedFileHandler.buffer.capacity=10000
utilities.enhancedlogger.handler.file.RollingDayBufferedFileHandler.limit=50971520
utilities.enhancedlogger.handler.file.RollingDayBufferedFileHandler.pattern=/temp/dig-debug.log
utilities.enhancedlogger.handler.file.RollingDayBufferedFileHandler.formatter=utilities.enhancedlogger.formatter.Formatter

当我启动 spring 应用程序时,它给了我下面的错误

java.lang.classNotFoundException: utilities.enhancedlogger.handler.file.RollingDayBufferedFileHandler
    at java.net.urlclassloader.findClass(urlclassloader.java:382)
    at java.lang.classLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)

尝试使用以下类加载器代码手动加载类。但还是一样的异常

Class.forName("utilities.enhancedlogger.handler.file.RollingDayBufferedFileHandler",true,ClassLoader.getSystemClassLoader());

感谢任何帮助。如果需要任何其他信息,请告诉我。提前致谢

解决方法

您正在执行正确的故障排除,因为您应该查看您的类是否对系统类加载器可见。但是,根据您的问题,您引用了 3 个不同的包:

  • wfplat.utilities.enhancedlogger...,
  • utilities.enhancedlogger...
  • com.ge.med.ct.wfplat.utilities.enhancedlogger...

第一步应该是清理它并使您的所有测试和配置文件指向完全限定的类名并重新测试。

那时,如果您的手动测试失败,则处理程序不在系统类路径中或未捆绑在 jar 中。检查类路径以查看包含处理程序的 jar 是否在系统类路径上。使用您喜欢的 zip 工具解压 jar 以查看是否包含二进制类文件,并且它是正确的包名称。

LogManager 将only load handlers from the system class path。这意味着您需要为日志处理程序制作一个特定的 jar 并将其放在系统类路径上。如果您的处理程序无法从系统类路径加载,那么您必须手动创建它并使用 Spring Boot 中的代码将其添加到您的应用程序记录器中。

,

我必须在包含处理程序的引导类路径中添加 jar。更改后的脚本在这里并且工作正常!!!

exec ${JVM_PATH} -Xbootclasspath/a:enhancedlogger-extensions-ifc-jar:enhancedlogger-extensions.jar -Djava.util.logging.config.file=/temp/logging.properties -jar service.jar

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?