如何使用Serilog ForContext

 苦柚甜甜 发布于 2023-01-15 12:55

我是Serilog的新手,我很难弄清楚如何使用上下文功能.当我运行下面的代码时,输​​出文件不包含报告ID.我缺少什么想法?

var logger = new LoggerConfiguration()
                .WriteTo
                .File(@"C:\Log.txt")
                .CreateLogger()
                .ForContext("Report ID", 10);

logger.Information("Test"); 

Nicholas Blu.. 15

并非附加到日志事件的所有属性都将由连接到记录器的所有接收器呈现; 此处使用的文件接收器仅包括时间戳,级别,消息等.

要将报告ID添加到文件中,请将其包含在接收器中outputTemplate:

var logger = new LoggerConfiguration()
  .WriteTo.File(@"C:\Log.txt",
    outputTemplate: "{Timestamp:u} [{Level}] ({ReportId}) {Message}{NewLine}{Exception}")
  .CreateLogger()
  .ForContext("ReportId", 10);

logger.Information("Test"); 

这将包括每条消息中的报告ID.

ForContext通常用于创建一个短暂的临时范围; 如果您想在所有可以使用的消息上使用相同的属性Enrich.WithProperty():

var logger = new LoggerConfiguration()
  .Enrich.WithProperty("ReportId", 10);
  .WriteTo.File(@"C:\Log.txt",
    outputTemplate: "{Timestamp:u} [{Level}] ({ReportId}) {Message}{NewLine}{Exception}")
  .CreateLogger()

平面文件是使用结构化日志快速启动和运行的好方法,但是使用更适合结构化存储的数据存储(例如CouchDB,RavenDB或者Seq)将使基于属性值查看和关联事件变得更好.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有