Предположим, у меня есть приложение scala, основанное на Futures
, на scala.concurrent
для обработки asyn/concurency (до сих пор не использовались актеры).Регистрация с аккой. app design
Во многих местах я использую log4j для входа в файл журнала. Так как я/О.И. полагаю, что может повысить производительность путем отправки сообщения журнала LoggingActor
что-то вроде этого:
def stuffTodo(arg:String)(implicit ex:ExecutionContext) : Future[Result] = {
// important performant work
// ..
logAcrot ! LogMessage("message-1")
// ...
}
где тзд: case class LogMessage(msg:String, implicit ex:ExecutionContext)
затем в ActorLog
def receive = {
case LogMessage(msg:String, ex:ExecutionContext) ⇒ {log.info(msg + ex)}
}
Я видел другие подходы, которые в основном обертываниеscala.concurent.ExecutionContext
(с текущей резьбой) и используйте Mapped Diagnostic Context -magic (log4j) и выполните регистрацию, установив идентификатор потока в лог-сообщение. Но в конечном итоге он блокирует/замедляет поток/выполнение (насколько я понимаю) и делает приложение медленнее.
В этом случае с этим Актером, регистрация остается независимой/асинхронной и последовательной в одно и то же время.
Это хорошая идея пойти этим путем? Обмен опытом? плюсы/минусы/проблемы? Перед тем, как попробовать тяжелую нагрузку ..
следуя вашей ссылке: Я сделал только это: https://github.com/Sergey80/scala-samples/blob/master/src/main/scala/concurrency/logging/LogSample.scala кажется работает. но все же следует выяснить, как сделать работу/работу макета: https://github.com/Sergey80/scala-samples/blob/master/src/main/scala/logback.xml – ses
Ницца. Я немного обновил ответ для других, используя некоторые из примеров из файла журнала. – andygavin