通过 SLF4j 和 logback 使用 Actor Logging 与使用 org.slf4j 使用 SLF4J 和 logback 进行日志记录

Using Actor Logging Via SLF4j and logback vs using org.slf4j to log using SLF4J and logback

我对在日志记录中使用的最佳实践感到困惑。我通过阅读发现 SLF4J 消除了应用程序和日志记录之间的耦合 API 等。所以如果我使用 actor 日志记录,它会不会与应用程序紧密耦合?我也检查了很多 github代码,我注意到他们只使用 actor 日志记录而不使用 org.SLF4J.LoggerFactory 日志记录。为什么?

我引用的一些链接

SACHA'S BLOG OF PROGRAMMATICALNESS

Another Good read

stack Overflow -> 检查最后一个答案

提前致谢

所以我们处在一个新世界,一个我们想要反应式和非阻塞但在此之前的一些信息的世界。

Akka 正在使用 SLF4j api 来记录日志,SLF4j 是常见日志库(即 log4j、logback)的外观,但为了不阻塞 actor 而执行所有这些异步操作。

所以:

log.info("Received msg: {} use thread {} to dispatch", message, Thread.currentThread().getName());

在日志定义为的演员中:

LoggingAdapter log = Logging.getLogger(getContext().system(), this);

向logging actor发送一条logging消息,IO操作实际上是由这个专门的actor完成的。

Log4j 或 logback 只是实际日志记录的实现,这就是为什么您仍然需要在项目中配置其中之一。

log4j.appender.file.layout.ConversionPattern=[%d,%p] [%X{sourceThread}] [%c{1}.%M:%L] %m%n

%X{sourceThread} 实际上为您提供了日志消息由原始 actor 发出的执行线程,而不是在日志 actor 中执行 IO 操作的线程(由 %t 记录)-更多关于此 http://doc.akka.io/docs/akka/current/java/logging.html

我的建议是使用 log4j 2,因为它使用异步操作并且不会阻塞记录 actor 后面的线程 - 更多关于 log4j 2 在 https://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

上的性能