当前位置: 首页 > 面试题库 >

异步记录

楚威
2023-03-14
问题内容

现在在我的应用程序中,某些时候我们正在将一些繁重的工作记录到日志文件中。

基本上仅用于日志记录,我们先创建可用数据的JSON,然后登录到Log文件。这是以JSON格式记录数据的业务要求。

现在从可用数据创建JSON,然后登录到FILE需要花费大量时间,并影响原始请求的返回时间。现在的想法是改善环境。

我们讨论的一件事是使用以下方法创建线程池

Executors.newSingleThreadExecutor()

在我们的代码中,然后向其提交任务,该任务会将数据转换为JSON并随后进行日志记录。

这是一个好方法吗?当我们管理线程池本身时,是否会引起一些问题?

如果有人可以分享更好的解决方案,我将不胜感激。某种程度上为此使用Log4j。我尝试使用AsyncAppender,但未实现任何期望的结果。我们正在使用EJB
3,Jboss 5.0,Log4j,java6。


问题答案:

我相信您在使用单独的线程池进行日志记录方面是正确的。在许多产品中,您将看到异步日志记录功能。使用与请求线程不同的线程来累积日志并将日志推送到日志文件。特别是在生产环境中,那里有数百万个传入请求,您的响应时间需要少于几秒钟。您无法负担任何诸如日志记录之类的操作来降低系统速度。因此,使用的方法是将日志添加到内存缓冲区中,并以合理大小的块异步推送它们。

使用线程池进行日志记录时要小心,
因为多个线程将在日志文件和内存日志缓冲区上工作,因此您需要注意日志记录。您需要以FIFO类型的缓冲区添加日志,以确保将日志打印在按时间戳排序的日志文件中。另外,请确保文件访问已同步,并且不会遇到日志文件全部颠倒或弄乱的情况。



 类似资料:
  • 我正在尝试设置log4j2以使用异步记录器将所有消息记录到滚动文件中。 是否有一种方法可以创建另一个记录程序来捕获所有事件?还有别的想法吗? 下面是我的log4j2.xml:

  • 我最近升级了我的应用程序以使用log4j2。我正在尝试利用它的异步记录器特性。然而,看起来它并没有创建一个。根据Log4j异步配置,它说, 要使所有记录器都是异步的,请将中断器jar添加到类路径中,并将系统属性Log4jContextSelector设置为org.apache.logging.log4j.core.async.AsyncloggerContextSelector。我还设置了log4

  • 基于https://logging.apache.org/log4j/2.x/manual/async.html我想使用混合同步和异步记录器的方法,以便从所有同步记录器的性能改进中获益。 基准代码: Log4j2配置正是文档中的配置(https://logging.apache.org/log4j/2.x/manual/async.html): 使用这种混合的同步/异步记录器配置,我可以每秒获得大

  • 背景: 在log4j2中,当使用asyncappender时,您可以将记录器的参数“blocking”设置为false,以便丢弃溢出缓冲区大小的任何日志,而不会减慢主线程的速度。(请参见asyncAppender下的此处。)https://logging.apache.org/log4j/2.x/manual/appenders.html) 我正在将我们的应用程序升级到这里找到的辉煌的asyncL

  • 使用log4j2,我很难让同步记录器和异步记录器一起工作。 从这里以Apache文档(标题为混合同步和异步记录器)为例,运行下面的应用程序将简单地创建日志文件,但不向其写入任何内容。我也不确定添加两个记录器指向同一个appender,但它的Apache留档,所以我假设这是好的。 LOG4J2配置 pom.xml 应用 但是,如果我更改log4j2配置并修改loggers元素以读取以下内容,我将在日

  • 本文向大家介绍Node.js异步I/O学习笔记,包括了Node.js异步I/O学习笔记的使用技巧和注意事项,需要的朋友参考一下 “异步”这个名词的大规模流行是在Web 2.0浪潮中,它伴随着Javascript和AJAX席卷了Web。但在绝大多数高级编程语言中,异步并不多见。PHP最能体现这个特点:它不仅屏蔽了异步,甚至连多线程也不提供,PHP都是以同步阻塞的方式来执行。这样的优点利于程序猿顺序编