NLog - 允许其他进程读取日志文件

dot*_*NET 4 c# io nlog

开始使用NLog。主进程(Windows 服务)每隔几秒写入日志文件一次。我需要允许另一个进程(桌面应用程序)在任意时间读取此文件(桌面应用程序不需要写访问权限)。

然而问题是,NLog 在打开文件进行写入时可能会创建排他锁。因此,如果桌面进程在文件被锁定时尝试读取,则会引发异常。

如何配置 NLog 以允许其他进程对日志文件内容进行只读访问,即使主进程已打开日志文件内容进行写入?桌面进程将调用File.ReadAllText()它,我希望它对于并发操作是安全的。

(我通读文档,发现 NLog 甚至允许从不同进程并发写入日志文件,因此理论上只读访问应该更容易。但我看不到任何解决方案)。

Rol*_*sen 8

而不是使用File.ReadAllText()File.ReadAllTextAsync()需要独占文件锁:

System.IO.IOException: The process cannot access the file '...' because it is being used by another process.
Run Code Online (Sandbox Code Playgroud)

然后我建议使用FileShare.ReadWriteNLog 主动写入日志文件时避免失败:

System.IO.IOException: The process cannot access the file '...' because it is being used by another process.
Run Code Online (Sandbox Code Playgroud)

这也将避免使用 NLog 写入日志文件的应用程序出现问题,因为使用排它锁读取会导致日志写入失败,导致日志事件丢失和性能不佳。