【问题标题】:Proper way to do rolling file sink with Serilog from multiple machines从多台机器上使用 Serilog 进行滚动文件接收的正确方法
【发布时间】:2019-05-30 07:46:52
【问题描述】:

我正在使用 Serilog.Sinks.RollingFile,它最近被 Serilog.Sinks.File 弃用,我希望很快会升级。

目前,我的问题是如何从多台机器(无论是新包还是旧包)正确登录到共享日志文件。当 10 个不同的服务器登录到这个单个文件时,有时行的片段最终会出现在不同的行上。示例和 appsettings.json 如下。

所以 2 个问题。

  1. 如何解决片段在不同行结束的问题。或者这个问题是从多台机器一次写入文件所固有的?

  2. 如果这是较新的库

"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
        }
      }
    ]
  }

【问题讨论】:

    标签: c# asp.net-core .net-core serilog


    【解决方案1】:

    执行此操作的普遍接受的方法是让每个应用实例在写入之前对文件进行排他锁,并在完成后释放它。

    不幸的是,这需要多次打开和关闭文件,这非常慢,并且会序列化工作,随着机器数量的增加,这会产生成本。 Serilog 目前没有实现这一点,因为它是那些似乎在测试中有效但在生产中表现很差的功能之一。

    让每个应用实例写入自己的文件是一个更好的方案,但从长远来看,使用基于网络的日志收集器/服务会少一些麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2010-11-18
      • 2014-11-02
      相关资源
      最近更新 更多