一对一对应于文件-在unix中-日志文件

一对一对应于文件-在unix中-日志文件,unix,logging,filesystems,inode,Unix,Logging,Filesystems,Inode,我正在写一个日志统一程序。也就是说,我有一个生成日志的系统: 我的.log,我的.log.1,我的.log.2,我的.log.3 我希望在每次迭代中存储从某个文件中读取的行数,以便在下一次迭代中,我可以继续从该位置读取 问题是,当文件已满时,它们会滚动: 最后一个日志被删除 ... my.log.2将成为my.log.3 my.log.1变为my.log.2 my.log变为my.log.1 并创建一个新的my.log 我当然可以使用inode来跟踪它们,inode几乎是与文件的一对一通信 我说

我正在写一个日志统一程序。也就是说,我有一个生成日志的系统: 我的.log,我的.log.1,我的.log.2,我的.log.3

我希望在每次迭代中存储从某个文件中读取的行数,以便在下一次迭代中,我可以继续从该位置读取

问题是,当文件已满时,它们会滚动: 最后一个日志被删除 ... my.log.2将成为my.log.3 my.log.1变为my.log.2 my.log变为my.log.1 并创建一个新的my.log

我当然可以使用inode来跟踪它们,inode几乎是与文件的一对一通信

我说“几乎”,是因为我害怕以下情况: 在我的两次迭代之间-一些文件被删除(比如说日志记录非常快),然后创建新文件,一些文件的索引节点被删除。现在的问题是——我会将这些文件误认为是旧文件——并开始从第500行(例如)而不是0读取

因此,我希望找到一种方法来解决这个问题——以下是我思考的几个方向——这可能会帮助你帮助我:

  • 除索引节点外的其他1对1通信

  • 标记文件的能力。我考虑使用chmod+x将文件标记为 现有文件,以及没有这些权限的新文件-我知道它们是新的-但是如果有人手动更改权限,这会混淆我的程序。所以如果你有其他方法来标记

  • 我考虑过创建指向文件的软链接,当文件被删除时,这些链接会被删除。这样我就可以知道哪些文件被删除了

  • 有没有办法得到“创建日期”

  • 只要能让我知道哪些文件是新的,或者任何创建文件一对一对应关系的想法,我想到的任何想法——可能以某种巧妙的方式使用时间戳、atime、ctime、mtime——都是好的


  • 谢谢你

    我可以想出一些替代方案:

    • 用于存储程序可用于其操作的每个日志文件的元数据

    • 可以安全地假设,旧日志文件的内容在存档后不会被修改,即
      my.log
      变为
      my.log.1
      后。您可以为每个文件(例如SHA-256)生成一个散列以唯一标识它

    • 所有合适的日志格式都会在每个条目中嵌入一个时间戳。您可以在文件中使用第一个条目(甚至整个条目本身)的时间戳进行标识。日志文件通常定期滚动,这将确保每个文件具有不同的开始时间戳