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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (24)

我使用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
        }
      }
    ]
  }
提问于
用户回答回答于

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

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

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

热门问答

云服务器中ping不可达,请教一下如何恢复?

推荐已采纳
本地主机 ping 不通实例可能由以下问题导致: 目标服务器的设置不正确 域名没有正确解析 链路故障 在确保本地网络正常的前提下(即您可以正常 ping 通其他网站),可根据以下操作进行排查: 检查实例是否配置公网 IP 检查安全组设置 检查系统设置 检查域名是否备案 检查域名解...... 展开详请

为什么加固之后生成四个文件?

腾讯云@移动安全

腾讯 · 移动开发工程师 (已认证)

腾讯云移动安全前端开发
推荐

选择最后一个_legu_aligned_signed.apk 文件,这个是加固并已重签名的文件。

COS Javascript SDK 为何没有 getService 方法?

因为 getService 请求的是 service.cos.myqcloud.com 或 cos.<Region>.myqcloud.com 域名,前端直接请求会导致跨域问题。 前端 js sdk 直接请求 bucket/object 相关的接口,虽然也会跨域,但你可以在 你...... 展开详请

iot设备通过mqtt协议连接,没有办法设置clientid?

DylanRichard

腾讯 · 产品经理 (已认证)

万物互联的时代,欢迎来到IoT的世界
推荐

物联网接入层有设备互踢的逻辑,如果是用同一个设备 ID 在不同地方登录,会导致其中一方被另一方踢下线。因此发现设备一直上下线时,需要确认是否有不同的人或者多线程在使用同一个设备 ID 执行登录操作。

实时语音识别支持c#平台吗?

支持的。虽然SDK没有C#的,但是可以通过API进行请求

如何延长签名有效期?

yinshawnrao

腾讯 · Web开发工程师 (已认证)

腾讯云搬砖工
推荐

如果需要自己生成签名,可以使用对象存储COS的SDK工具,里面有提供方法,获取下载链接,签名时间可以参数控制。

https://cloud.tencent.com/document/product/436/7753

所属标签

扫码关注云+社区

领取腾讯云代金券