Воспроизвести не удается загрузить пользовательский аккаунт назад

Я создал пользовательское приложение для резервного копирования. Но игра дает исключение ClassNotFound для приложения.

Ниже приведен мой 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

<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>

Я получаю следующую 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 компилируется, а также проверяет скомпилированный байт-код. Почему не играет за это?

Ответ 1

Кажется, что воспроизведение динамически скомпилированных классов в режиме dev недоступно для журнала. Я борюсь с той же проблемой. Помещение моего пользовательского приложения в отдельный файл jar работает для меня. Я предполагаю, что в prod с поставленными финальными файлами jar это не должно быть проблемой.

Ответ 2

Хотя решение по добавлению отдельного файла jar работает, я нашел другое решение, которое добавляет преимущества доступа к вашему uri, как определено в вашем файле application.conf.

Создайте EagerSingleton в своем модуле. Это будет вызвано во время запуска. Внутри этого создайте свой MongoDB Appender и добавьте его в регистратор, который вы хотите войти в MongoDB. Преимущество состоит в том, что вы можете ввести свою конфигурацию в этот синглтон, а затем перейти к настройкам конфигурации, чтобы перейти к вашему MongoDB Appender.