首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Serilog从多台机器进行滚动文件接收的正确方法

使用Serilog从多台机器进行滚动文件接收的正确方法
EN

Stack Overflow用户
提问于 2019-05-30 05:27:34
回答 1查看 1.4K关注 0票数 1

我使用的是Serilog.Sinks.RollingFile,它最近被弃用,取而代之的是Serilog.Sinks.File,我希望很快就能升级。

现在,我的问题是如何正确地从多台机器(使用新的或旧的包)记录到共享日志文件。当10个不同的服务器登录到这个文件时,有时这些行的片段会出现在不同的行上。示例和appsettings.json如下所示。

所以有两个问题。

  1. 如何解决碎片在不同行结束的问题。或者,这是一次从多台计算机写入文件所固有的问题吗?
  2. 如果这是较新的库

代码语言:javascript
复制
"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
        }
      }
    ]
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-30 07:46:52

通常接受的方法是让每个应用程序实例在写入之前对文件进行独占锁定,并在写入完成后释放它。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56368770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档