我对在日志记录中使用的最佳实践感到困惑。我通过阅读发现SLF4J删除了应用程序和日志记录API等之间的耦合。所以,如果我使用actor日志记录,它是否会与应用程序紧密耦合?。我还检查了很多github代码,我注意到他们只使用actor记录而不是org.SLF4J.LoggerFactory记录。为什么呢?
我提到的一些链接
SACHA'S BLOG OF PROGRAMMATICALNESS
stack Overflow - >检查了最后一个答案
提前致谢
答案 0 :(得分:0)
所以我们处在一个新的世界,一个我们想要被动反应和无阻塞的世界,但在此之前有一些信息。
Akka用于记录SLF4j api,它是常见日志库的一个外观,即log4j,logback,但为了不阻止actor,所有这些都是async。
所以:
log.info("Received msg: {} use thread {} to dispatch", message, Thread.currentThread().getName());
在一个actor中,其中log定义为:
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
向日志记录actor发送日志消息,IO操作实际上由此专门的actor完成。
Log4j或logback只是实际日志记录的实现,这就是为什么你仍需要在项目中配置if之一。
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后面的线程 - 更多关于https://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html上的log4j 2性能