【问题标题】:Serilog sink wrapper mapping, separate filename from contentSerilog 接收器包装映射,将文件名与内容分开
【发布时间】:2020-04-17 00:35:49
【问题描述】:

使用Serilog.Sinks.Map库,示例显示

Log.Logger = new LoggerConfiguration()
    .WriteTo.Map("Name", "Other", (name, wt) => wt.File($"./logs/log-{name}.txt"))
    .CreateLogger();

Log.Information("Hello, {Name}!", "Alice");
Log.CloseAndFlush();

一个事件写入log-Alice.txt 并带有文本Hello, Alice!

我如何做类似但将文件名与内容分开?比如我想做

Log.Information("Hello!", "Alice");

应该写入文件log-Alice.txt,但带有文本Hello!

基本上我的目标是记录到任何命名的日志,但可能有数百个。

【问题讨论】:

    标签: c# serilog


    【解决方案1】:

    Serilog.Sinks.Map,在您的示例中,使用名为Name 的属性来定义文件名。如果不想在消息模板中定义这个属性,可以通过Context定义,例如:

    var log = Log.ForContext("Name", "Alice");
    
    log.Information("Hello!");
    log.Information("Hello Again!");
    

    以上两条消息都将写入log-Alice.txt 文件,因为它们都在日志上下文中携带属性Name = "Alice"

    同样,下面会将每条消息写入一个单独的文件:

    Log.ForContext("Name", "John").Information("Hello 1!"); // log-John.txt
    Log.ForContext("Name", "Peter").Information("Hello 2!"); // log-Peter.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-02
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多