如何从多个线程记录数据?

und*_*ack 10 java logging multithreading

巨大的并行运行的线程数量不断(假设这个连续部分)).所有线程都想记录一些应用程序数据,基本上是一组值.

  1. 记录这些数据的最佳方法是什么?单/多文件?
  2. 备份此日志的最佳方法是什么?
  3. 从备份文件中读取数据并将其转换为有用的方法的方法是什么?

这样的几个线程,建议log4net和log4j,但我想知道实际的过程?多个线程如何写入同一个日志文件?每个线程都需要文件级锁定吗?这一切如何运作?

任何指向理解所有细节的指针都将受到赞赏.

谢谢.

Pet*_*ese 6

像log4j这样的库可以根据您的需要进行配置.

  1. 拆分太多文件会使调试某些问题变得困难,但是有一个单片文件会留下混合进程.我会为每个原子进程提供一个文件,也就是说,邮件管理器可能会使用自己的日志文件.jdbc的额外调试信息可能有自己的日志文件,但仍会在主应用程序日志中报告错误和重大事件.

  2. 主要日志库支持日志拆分和轮换.对于一个使用良好的Web应用程序,我更喜欢为每天制作一个日志文件,并且还要分割一定大小.您可以构建一个cron来压缩旧日志,根据应用程序的不同,您可能需要将它们备份几个月或无限期.

  3. 至于调试实用性,您可以grep某些字符串,例如"Exception"来报告.如果要查找统计信息,除了进程日志之外,还应该为该特定目的创建日志.

日志可以是同步的,也可以是异步的,后者通常最适合性能.通常,构建消息队列然后由单独的线程写入.因此,多个线程可以写入内存中的那个队列或缓冲区,一个线程将锁定并写入该文件.它几乎在后台,你不必考虑它,除非你正在写大量的数据.