我有一个将日志写入NLog创建的文件的应用程序。 我有另一个名为Log Viewer的应用程序。它可以打开和读取上面提到的日志文件。但这里有一些问题。当日志查看器正在读取日志文件,并且第一个应用程序正在其中写入时,在日志查看器中无法看到某些日志行。 例如,如果第一个应用程序在每个毫秒内写入日志,则日志查看器无法跟踪新的日志行并错过其中的一些,您知道吗?我需要一个可以跟踪任何新日志行的在线日志查看器。我不想在每个方法调用中读取文件中的所有文本,我只需要在其中读取新的日志行
答案 0 :(得分:3)
您可以知道日志行是新的唯一方法是知道您上次读取的文件中的哪个位置(例如" int lastposition = 0;"。 您需要从该位置读取,直到文件结束。 "文件结束"的位置与filelength相同。读取文件块后;显示您在查看器中阅读的内容,并将最后一个位置保存到变量lastposition;你需要在下次开始的地方,观众正在阅读。
但如果观众无法打开文件......这是另一个故事。
答案 1 :(得分:3)
让两个应用程序共享相同的日志可能会有问题。可能最简单的解决方案是让您的查看器复制原始日志文件,并查看它自己的专用副本。您可以偶尔检查实际日志文件是否有更新并相应地制作新副本。
同时访问同一个文件将需要锁定,如果文件无法写入(可能会阻塞,丢失日志条目或生成异常),则可能会导致应用程序出现问题。
答案 2 :(得分:0)
最佳解决方案是为数据库设置NLog目标。跟踪最后更新的行比跟踪文件位置更容易,更安全。 我不建议共享文件活动日志文件,包括读写。