java - 为什么使用 akka 事件处理程序进行日志记录

标签 java scala logging actor akka

在以下文档中,事件处理程序被描述为代替日志记录 http://akka.io/docs/akka/1.2/general/event-handler.html

There is an Event Handler which takes the place of a logging system in 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");

基于线程或调度程序内部结构,通过在我没有看到的上述记录器模式上使用事件处理程序,我是否可以获得某种潜在的好处?否则,使用事件处理程序进行日志记录感觉就像是无缘无故地偏离了熟悉的模式。

感谢任何输入!

最佳答案

日志记录通常意味着 IO,它会减慢代码的运行速度。在 actor 的上下文中,每条消息都必须在您的接收方法中处理为单个文件,在某些情况下,这种开销会使该方法完成的时间相差一个数量级(或更多)。在基于 Erlang 的系统中,将日志记录移出运行接收 block 的线程(或进程,在 Erlang 范围内)的控制流之外已经成为一种常见模式。如果您的 actor 不严重依赖于接收 block 的时间,您可以随时回退到标准日志记录模式,如果这对您来说更容易,但习惯基于 EventHandler 的方法可能是个好主意。

关于java - 为什么使用 akka 事件处理程序进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743331/

相关文章:

java - 如何突出显示 JSF 数据表中的特定行

java - 如何通过 lambda 表达式将 Collection<X> 转换为 Object[][]

Java 斐波那契系列 - 返回数组中的值

scala - 如何定义在运行时工作的联合类型?

c - RHEL 5的日志记录应用程序或库

javascript - 无法将 winston 放入 nodejs 模块中

java - log4j %u{RANDOM} 的 logback 等价物是什么

java - 列出所有未报告的异常(包括父类(super class)声明异常的异常)

java - 使用 JMeter/Java 上下文的 Scala JSR223 脚本

scala - 如何从Typesafe config配置系统属性或回退配置变量?