2

这是特定于创建日志文件的。当我使用我的应用程序连接到服务器时,它会将详细信息写入日志文件。当日志文件达到特定大小时,假设为 1MB,然后我创建另一个名为 LOG2.log 的文件。

现在在写回日志文件时,有两个甚至更多的日志文件,我想获取最新的一个。我不想遍历该目录中的所有文件并提取文件,因为这将花费处理时间,是否有任何其他方法可以获取目录中最后创建的文件或日志文件。

4

5 回答 5

3

最好的办法是轮换日志文件,这在 Unix 中通常会完成(通常通过 cron。)

一种可能的实现是保留 10 个(或许多)旧日志文件,如果您的程序检测到 Log.log 超过 1MB,则将 Log09.log 移动到 Log10.log,将 Log08.log 移动到 Log09.log,从 7 到 8, 6 到 7,... 2 到 3,然后从 Log.log 到 Log02.log。最后,新建一个 Log.log 文件,继续记录。

这样,您将始终写入 Log.log,并且没有文件系统之谜。从理论上讲,这种方法可以扩展到大量的日志文件(超出您合理需要的数量),并且比写入 Log3023.log 更标准。另外,人们总是知道在哪里可以找到当前日志。

于 2010-12-09T07:20:05.623 回答
1

我相信答案是“僵硬的”。您必须自己迭代并找到最新的,因为操作系统不会为每个可能的排序顺序保留索引,以防有人可能想要它们。

于 2010-12-09T07:13:30.033 回答
0

可以修改服务器吗?如果是这样,也许引入一个 LASTLOG.log 文件,该文件要么包含最新日志文件的名称,要么包含它的实际内容。

否则,Tony 是对的。除了遍历自己之外,没有真正的方法可以做到这一点。

于 2010-12-09T07:18:16.603 回答
0

优雅怎么样:

ls -t | head -n 1
于 2010-12-09T07:19:45.170 回答
0

最有效的方法是使用专门的函数来遍历所有条目(因为 NTFS 或 FAT 不按时间索引),但忽略您不需要的内容。为此,请致电FindFirstFileExinfo level FindExInfoBasic。这会跳过 8.3 名称解析。

于 2010-12-09T08:58:50.553 回答