Почему я не вижу свои сообщения журнала для моих актеров для уровней, отличных от ошибки - PullRequest
0 голосов
/ 01 января 2019

Итак, у меня есть игровое приложение с такими подмодулями:

/app  // play app
/modules/notifications

Внутри моего игрового приложения есть модуль задач, который запускает моего главного актера:

Logger.debug("starting main supervisor actor Iot")
val supervisor = system.actorOf(IotSupervisor.props(), "iot-supervisor")

внутри уведомлений у меня есть этот файл:

/ modules / notifications / src / main / supervisor.scala

package com.example.notifications


import akka.actor.{ Actor, ActorLogging, Props }

object IotSupervisor {
  def props(): Props = Props(new IotSupervisor)
}

class IotSupervisor extends Actor with ActorLogging {
  log.debug("Iot constrcutor called..")
  override def preStart(): Unit = log.info("IoT Application started")
  override def postStop(): Unit = log.info("IoT Application stopped")

  // No need to handle any messages
  override def receive = Actor.emptyBehavior

}

Я вижу журналы в своей консоли:

[отладка] приложение - запуск главного актера супервизора Iot [info] pahEnabledFilters - включенные фильтры (см. https://www.playframework.com/documentation/latest/Filters):

play.filters.csrf.CSRFFilter
play.filters.headers.SecurityHeadersFilter

[info] play.api.Play - приложение запущено(Dev)

Мой logback.xml выглядит так:

<!-- https://www.playframework.com/documentation/latest/SettingsLogger -->
<configuration>

  <conversionRule conversionWord="coloredLevel" converterClass="play.api.libs.logback.ColoredLevel" />

  <!--<appender name="FILE" class="ch.qos.logback.core.FileAppender">-->
    <!--<file>${application.home:-.}/logs/application.log</file>-->
    <!--<encoder>-->
      <!--<pattern>%date [%level] from %logger in %thread - %message%n%xException</pattern>-->
    <!--</encoder>-->
  <!--</appender>-->

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%coloredLevel %logger{15} - %message%n%xException{10}</pattern>
    </encoder>
  </appender>

  <!--<appender name="ASYNCFILE" class="ch.qos.logback.classic.AsyncAppender">-->
    <!--<appender-ref ref="FILE" />-->
  <!--</appender>-->

  <appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="STDOUT" />
  </appender>

  <logger name="play" level="INFO" />
  <logger name="application" level="DEBUG" />
  <logger name="com.example.notifications" LEVEL="TRACE" />




  <!-- Off these ones as they are annoying, and anyway we manage configuration ourselves -->
  <logger name="com.avaje.ebean.config.PropertyMapLoader" level="OFF" />
  <logger name="com.avaje.ebeaninternal.server.core.XmlConfigLoader" level="OFF" />
  <logger name="com.avaje.ebeaninternal.server.lib.BackgroundThread" level="OFF" />
  <logger name="com.gargoylesoftware.htmlunit.javascript" level="OFF" />

  <root level="WARN">
    <!--<appender-ref ref="ASYNCFILE" />-->
    <appender-ref ref="ASYNCSTDOUT" />
  </root>

</configuration>

Я не вижу никаких сообщений журнала внутри моих актеров, если я не использую log.error , почему это так?

Я установил уровень TRACE для com.example.notifications

Правильно ли я понимаю, что всякий раз, когда я использую регистратор, он будет использовать регистратор, определенный вlogback, который совпадает с именем пакета? т.е. com.example.notification будет использоваться для поиска регистратора в моем logback.xml и использованияУРОВЕНЬ там определен?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вам необходимо прочитать эту документацию о том, как включить slf4j в akka.

В итоге,

добавить к build.sbt

libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-slf4j" % "2.5.19",
  "ch.qos.logback" % "logback-classic" % "1.2.3"
)

добавить к application.conf

akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  loglevel = "DEBUG"
  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
}

Вам необходимо включитьSlf4jLogger в элементе регистраторов в конфигурации.Здесь вы также можете определить уровень журнала шины событий.Более подробные уровни регистрации могут быть определены в конфигурации сервера SLF4J (например, logback.xml).Вы также должны определить akka.event.slf4j.Slf4jLoggingFilter в свойстве конфигурации фильтра журналирования.Он отфильтрует события журнала, используя конфигурацию сервера (например, logback.xml), прежде чем они будут опубликованы в шине событий.

0 голосов
/ 01 января 2019

Убедитесь, что ваш проект зависит от "com.typesafe.akka" %% "akka-slf4j" и "ch.qos.logback" % "logback-classic".В противном случае akka может использовать добавление регистратора, отличное от logback.

Если это не решит вашу проблему, попробуйте явно использовать регистратор вашей ActorSystem:

system.log.debug("starting main supervisor actor Iot")
...