仅在jar文件中找到自定义logback适配器类

时间:2015-09-16 01:49:04

标签: playframework sbt logback

我编写了自己的logback适配器类。当我直接在类路径中(在目录中)使用相应的类文件启动程序时,logback无法找到它。

ERROR in ch.qos.logback.core.joran.action.AppenderAction - Could not create an Appender of type [com....MyAppender]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com....MyAppender
at ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com....MyAppender
at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:73)
at ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:48)

如果我把它放在一个jar文件中,一切都很好。

我看到logback正在使用它自己的类加载器,当我使用sbtplay启动我的应用程序时出现问题。所以问题可能就在那里。

关于如何解决此问题的任何想法?

使用:

"com.typesafe.play" %% "play" % "2.3.9"
"ch.qos.logback" % "logback-core" % "1.1.3",
sbt launcher version 0.13.8

2 个答案:

答案 0 :(得分:1)

我看到类似问题Play fails to load custom log back appender,但仍未解决。

建议的解决方案只是保持原样 - 它将在prod模式下工作,因为所有代码都将在jar文件中进行预编译。我希望你也能在prod模式下尝试过。

答案 1 :(得分:1)

我相信Andriy对“Play fails to load custom log back appender”问题的引用可能包含解决问题的方法。

当logback尝试配置它的适配器时,Play还没有启动。我怀疑Play的动态加载和重新编译机制也会修改类路径。这意味着当时logback启动时的类路径尚未包含target/scala-2.xx/classes路径。这可能会在以后添加。