读取一个由NLog创建的日志文件并同时写入其中

本文关键字:文件 日志 一个 创建 NLog 读取 | 更新日期: 2023-09-27 18:30:05

我有一个应用程序,它可以将日志写入NLog创建的文件中。我还有一个叫日志查看器的应用程序。它可以打开并读取上面提到的日志文件。但这里有一些问题。当日志查看器正在读取日志文件,并且第一个应用程序正在其中写入时,在日志查看器中看不到某些日志行。例如,如果第一个应用程序每毫秒写一次日志,那么日志查看器就无法跟踪新的日志行,从而错过了其中的一些,你知道吗?我需要一个在线日志查看器,可以跟踪任何新的日志行。我不想每次方法调用都读取文件中的所有文本,我只需要读取其中的新日志行

读取一个由NLog创建的日志文件并同时写入其中

知道日志行是新的唯一方法是知道上次读取的文件中的哪个位置(例如"int lastposition=0;"。您需要从该位置读取,直到文件结束。"文件末尾"的位置与文件长度相同。当文件块已被读取时;您在查看器中显示所读内容,并将最后一个位置保存到变量lastposition中;下一次你需要从哪里开始,观众正在阅读。

但是如果查看器无法打开文件。。。那是另外一个故事。

让两个应用程序共享同一日志可能会有问题。可能最简单的解决方案是让查看器复制原始日志文件,并查看它自己的专用副本。您可以偶尔检查实际的日志文件是否有更新,并相应地制作新的副本。

让两人都访问同一个文件将需要锁定,如果文件无法写入,则有可能在应用程序中引发问题(可能会阻塞、丢失日志条目或生成异常)。

最好的解决方案是为数据库设置一个NLog目标。跟踪最后更新的行比跟踪文件位置更容易、更安全。我不建议共享一个文件活动日志文件读写。

如何设置NLog数据库目标。