播放无法加载自定义的日志后退附加程序 [英] Play fails to load custom log back appender
问题描述
我创建了一个自定义的logback追加器.但是播放为追加程序提供了ClassNotFound异常.
I have created a custom logback appender. But play gives a ClassNotFound exception for the appender.
以下是我的appender
Following is my appender
package log
import ch.qos.logback.core.AppenderBase
import ch.qos.logback.core.UnsynchronizedAppenderBase
import ch.qos.logback.core.spi.ContextAwareBase
import log.model.LogMessage
import data.OrganizationDao
import log.dao.LogDao
import ch.qos.logback.core.status.Status
class MongoAppender extends ContextAwareBase {
private def add(level:Int, msg: String, ex: Throwable) = {
val message = ex match {
case null => LogMessage(None, level, msg, null, null, new Array[String](0))
case _ => LogMessage(None, level, msg, ex.getClass().getName(), ex.getMessage(), new Array[String](0))
}
LogDao.save(message)
}
override def addStatus(status:Status) = {
add(status.getLevel(), status.getMessage(), status.getThrowable())
}
}
以下是我的logger.xml
The following is my logger.xml
<configuration>
<conversionRule conversionWord="coloredLevel"
converterClass="play.api.Logger$ColoredLevel" />
<appender name="Mongo" class="log.MongoAppender">
</appender>
<logger name="play" level="INFO" />
<logger name="application" level="INFO" />
<root level="ERROR">
<appender-ref ref="Mongo" />
</root>
</configuration>
我正在获取以下堆栈跟踪
I am getting the following stacktrace
Caused by: java.lang.ClassNotFoundException: log.MongoAppender
at at java.net.URLClassLoader$1.run(Unknown Source)
at at java.net.URLClassLoader$1.run(Unknown Source)
at at java.security.AccessController.doPrivileged(Native Method)
at at java.net.URLClassLoader.findClass(Unknown Source)
at at java.lang.ClassLoader.loadClass(Unknown Source)
at at java.lang.ClassLoader.loadClass(Unknown Source)
at at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameA
ndParameter(OptionHelper.java:60)
我检查了appender类是否已编译,还检查了编译后的字节码.为什么不玩把它捡起来?
I have checked that the appender class does compile and also checked the compiled byte code. Why does not play pick it up?
推荐答案
似乎在dev模式下play的动态编译类不可用于logback.我在同一个问题上苦苦挣扎.将我的自定义附加程序放到一个单独的jar文件中对我有用.我认为在带有阶段性最终jar文件的产品中这应该不是问题.
It seems that play's dynamically compiled classes in dev mode are not available for logback. I'm struggling with the same issue. Putting my custom appender to a separate jar file works for me. I assume in prod with staged final jar files this should not be a problem.
这篇关于播放无法加载自定义的日志后退附加程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!