3

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

4

3 回答 3

3

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

两者都访问同一个文件需要锁定,如果文件不可写入(可能阻塞、丢失日志条目或生成异常),则可能会导致应用程序出现问题。

于 2013-09-16T17:49:29.943 回答
3

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

但如果查看者无法打开文件……那就是另一回事了。

于 2013-09-03T12:29:02.687 回答
1

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

如何设置 NLog 数据库目标。

于 2016-03-17T23:43:42.703 回答