播放无法加载自定义日志返回appender

use*_*557 18 logback playframework

我已经创建了一个自定义的logback appender.但是play为appender提供了一个ClassNotFound异常.

以下是我的追加者

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())
  }

}
Run Code Online (Sandbox Code Playgroud)

以下是我的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>
Run Code Online (Sandbox Code Playgroud)

我得到以下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)
Run Code Online (Sandbox Code Playgroud)

我已经检查了appender类是否编译并检查了编译的字节代码.为什么不玩捡起来?

aga*_*bor 13

似乎在dev模式下play的动态编译类不可用于logback.我正在努力解决同样的问题.将我的自定义appender放到一个单独的jar文件中对我有用.我假设在prod中使用暂存的最终jar文件,这应该不是问题.