【问题标题】:Read data from log file periodically定期从日志文件中读取数据
【发布时间】:2011-11-30 09:54:46
【问题描述】:

我正在生成一个日志文件,我想要的是定期读取数据,而不必每次都从头开始读取。谁能帮忙。

【问题讨论】:

  • 你已经做过的一个例子也会有所帮助。 ;)

标签: java file-io scheduled-tasks scheduling


【解决方案1】:

打开文件并有一个循环,

  • 获取大小并与您已经阅读的大小进行比较。
  • 如果大小增加,则读取那么多字节,不要再读取了。这样做意味着您可以稍后阅读更多内容。
  • 如果大小已缩小,请关闭文件并重新开始。

您可以使用 FileInputStream 或 RandomAccessFile。

【讨论】:

  • 如果 reader 和 writer 在同一个进程中,可以通过 notifyAll()/wait() 将长度放在同步变量中,writer 之间的平均延迟约为 100 微秒和读者。
【解决方案2】:

使用 unix 命令 'tail',选项 '-f' 和 '-F' 用于同一个命令也很方便。

请参阅此处http://www.thegeekstuff.com/2009/08/10-awesome-examples-for-viewing-huge-log-files-in-unix/ 以获取示例,或者只是谷歌搜索示例。

【讨论】:

【解决方案3】:

如果您想运行一个程序来定期读取您的日志文件,那么您可以使用诸如 Quartz Scheduler 之类的调度程序来定期运行它。

【讨论】:

    【解决方案4】:

    RandomAccessFile 是一个不错的选择。如果您离开应用程序,您必须在离开前保留上次阅读的位置,以避免重新阅读信息。

    另一方面,对于繁重的事件流,日志文件往往会变得相当大。轮换日志文件将允许您将问题稍微转向文件命名。您可以将系统配置为每天生成一个日志文件,如下所示:

    app_access.2011-11-28.log, 
    app_access.2011-11-29.log, 
    app_access.2011-11-30.log,
    ...
    

    如果您获得的文件仍然很大,您可以按日期和时间轮换它们,并且您还可以将小时作为文件名的一部分。然后,您的文件可以轮换一次,比方说,每三个小时甚至每小时一次。这将为您提供更多可供阅读的日志文件,但它们会更小,因此更易于处理。您要查找的日期和时间范围将是文件名的一部分。

    您还可以另外按文件大小旋转。如果您选择最大文件大小,您可以处理您可以完全避免随机访问一个巨大的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 2022-10-13
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      相关资源
      最近更新 更多