[英]Proper way to do rolling file sink with Serilog from multiple machines
我正在使用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
}
}
]
}
通常接受的方法是讓每個應用程序實例在寫入之前對文件進行排他鎖,並在完成后釋放它。
不幸的是,這需要大量打開和關閉文件,這非常慢,並且需要序列化工作,隨着機器數量的增加,這會產生成本。 Serilog目前未實現此功能,因為它的功能之一似乎可以在測試中使用,但在生產中卻表現不佳。
將每個應用程序實例寫入其自己的文件是一個更好的方案,但是從長遠來看,使用基於網絡的日志收集器/服務將不會有太多麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.