Подтвердить что ты не робот

Зачем использовать akka eventhandler для регистрации

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

В Акке есть обработчик событий, который заменяет систему регистрации:

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");

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Будьте осторожны, используя 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"