开始使用NLog。主进程(Windows 服务)每隔几秒写入日志文件一次。我需要允许另一个进程(桌面应用程序)在任意时间读取此文件(桌面应用程序不需要写访问权限)。
然而问题是,NLog 在打开文件进行写入时可能会创建排他锁。因此,如果桌面进程在文件被锁定时尝试读取,则会引发异常。
如何配置 NLog 以允许其他进程对日志文件内容进行只读访问,即使主进程已打开日志文件内容进行写入?桌面进程将调用File.ReadAllText()它,我希望它对于并发操作是安全的。
(我通读文档,发现 NLog 甚至允许从不同进程并发写入日志文件,因此理论上只读访问应该更容易。但我看不到任何解决方案)。
而不是使用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 写入日志文件的应用程序出现问题,因为使用排它锁读取会导致日志写入失败,导致日志事件丢失和性能不佳。
| 归档时间: |
|
| 查看次数: |
5203 次 |
| 最近记录: |