现在在我的应用程序中,在某些情况下,我们会将一些繁重的内容记录到日志文件中。
基本上,我们只为日志创建可用数据的JSON,然后登录到Log files.This是以JSON格式记录数据的业务需求。
现在,从可用的数据创建JSON,然后将其记录到文件中需要花费大量时间,并且会影响原始请求返回时间。现在的想法是改善位置。
我们已经讨论过的其中一件事是使用
Executors.newSingleThreadExecutor() 在我们的代码中,然后将任务提交给它,它将数据转换为JSON并随后进行日志记录。
这是一个好的方法吗?当我们管理线程池本身时,它会产生一些问题吗?
如果有人能分享更好的解决方案,我将不胜感激。在这个.I中使用Log4j的一些方法尝试使用AsyncAppender,但是没有达到任何预期的结果。我们使用的是EJB3、Jboss 5.0、Log4j、java6。
发布于 2013-06-10 15:07:59
我相信您在使用单独的线程池进行日志记录方面是正确的。在许多产品中,您将看到异步日志记录功能。使用与请求线程不同的线程来累积日志并将其推送到日志文件。特别是在生产环境中,有数百万个传入请求,您的响应时间需要少于几秒。你不能承受任何像日志记录这样的东西来降低系统的速度。因此,使用的方法是在内存缓冲区中添加日志,并以合理大小的块异步推送它们。
在使用线程池记录时需要注意,因为多个线程将处理日志文件和内存日志缓冲区,因此您需要注意日志记录。您需要在FIFO类型的缓冲区中添加日志,以确保日志按时间戳排序打印在日志文件中。还要确保文件访问是同步的,并且不会遇到日志文件全部颠倒或混乱的情况。
发布于 2013-06-10 15:11:03
看看Logback,AsyncAppender它已经提供了单独的线程池,队列等,并且很容易配置,它几乎和你正在做的一样,但省去了你重新发明轮子的麻烦。
发布于 2013-06-10 15:07:11
是否考虑使用MongoDB for logging?
https://stackoverflow.com/questions/17018420
复制相似问题