我使用的是Serilog.Sinks.RollingFile,它最近被弃用,取而代之的是Serilog.Sinks.File,我希望很快就能升级。
现在,我的问题是如何正确地从多台机器(使用新的或旧的包)记录到共享日志文件。当10个不同的服务器登录到这个文件时,有时这些行的片段会出现在不同的行上。示例和appsettings.json如下所示。
所以有两个问题。
"Serilog": {
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"pathFormat": "\\\\server\\share\\log-{Date}.log",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} | {Level:u3} | {MachineName} | {SourceContext} | {RequestId} | {RequestPath} | {ThreadId} | {Message}{NewLine}{Exception}",
"shared": true
}
}
]
}
发布于 2019-05-30 07:46:52
通常接受的方法是让每个应用程序实例在写入之前对文件进行独占锁定,并在写入完成后释放它。
不幸的是,这需要大量打开和关闭文件,这非常慢,并且序列化工作,这会随着机器数量的增加而产生成本。Serilog目前还没有实现这一点,因为它是那些在测试中似乎可以工作,但在生产中表现非常差的功能之一。
让每个应用程序实例写入自己的文件是一个更好的方案,但从长远来看,使用基于网络的日志收集器/服务的麻烦会更少。
https://stackoverflow.com/questions/56368770
复制相似问题