зачем использовать akka eventhandler для регистрации - PullRequest
12 голосов
/ 12 октября 2011

В следующем документе обработчики событий описаны как занимающие место регистрации http://akka.io/docs/akka/1.2/general/event-handler.html

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

akka.event.EventHandler

В частности, эта ссылка предоставляет пример того, как это сделать при использовании slf4j: http://akka.io/docs/akka/1.2/general/slf4j.html

Мой вопрос: какие преимущества это дает? «Зачем мне это делать, а не просто использовать регистратор по стандартному шаблону?»

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
private static Logger log = LoggerFactory.getLogger(MyActor.class);
...
log.info("doing something");

Есть ли какая-то базовая выгода, которую я получу, основываясь на потоках или внутренностях диспетчера, используя обработчик событий поверх вышеупомянутого шаблона логгера, который я не вижу? Если нет, то использование обработчика событий для регистрации похоже на отклонение от привычного шаблона без явной причины.

Спасибо за любой вклад!

Ответы [ 3 ]

11 голосов
/ 12 октября 2011

Ведение журнала обычно означает IO, что может замедлить работу вашего кода. В контексте субъекта, где каждое сообщение должно обрабатываться в одном файле в вашем методе получения, эти издержки могут в некоторых случаях приводить к разнице во времени (или более) во времени для завершения этого метода. В системах, основанных на Erlang, уже существует общая схема перемещения журналирования за пределы потока управления потоком (или процессом в сфере Erlang), на котором выполняется блок приема. Если ваши действующие лица не сильно зависят от времени получения блока, вы всегда можете вернуться к стандартному шаблону ведения журнала, если это облегчит вам задачу, но, вероятно, это хорошая идея, чтобы привыкнуть к подходу на основе EventHandler.

0 голосов
/ 02 марта 2012

Будьте осторожны, используя Slf4jEventHandler в Akka 1.2. Вы теряете возможность устанавливать уровни ведения журнала для каждого класса по сравнению с

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
private static Logger log = LoggerFactory.getLogger(MyActor.class);
...
log.info("doing something");

Причина, по которой Slf4jEventHandler использует только один регистратор с именем "akka.event.slf4j.Slf4jEventHandler"

0 голосов
/ 24 января 2012

@ DParsin, вам нужно иметь файл application.conf в вашем classpath по крайней мере со следующим:

akka {
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
    loglevel = DEBUG
    stdout-loglevel = INFO
}

и, конечно, также убедитесь, что вы используете logback (или slf4j-log4j и т. Д.). Если у вас есть logback-classic-1.0.0.jar в вашем пути к классам, убедитесь, что в вашем пути к классам нет других адаптеров SLF4J.

...