C#中如何配置SeriLog将SourceContext等属性输出到txt日志文件
实现步骤
你只需要做两处调整即可实现输出SourceContext属性的需求:
- 第一步:修改File日志接收器的outputTemplate模板,新增{SourceContext}占位符
- 第二步:给日志对象指定SourceContext属性值
修改后的完整配置代码
#region Logger Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() .Enrich.WithProcessId() .Enrich.WithProcessName() .Enrich.WithThreadId() .Enrich.FromLogContext() .WriteTo.Console(restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information) .WriteTo.File("log.txt", restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Verbose, rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, // 新增{SourceContext}占位符,可根据需要调整展示位置 outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] [{SourceContext}] {Message:lj} {Exception:1}{NewLine}") .CreateLogger(); Log.Verbose("Test Verbose"); Log.Debug("Test Debug."); Log.Information("Test Info."); Log.Warning("Test Warning!"); Log.Error("Test Error!!"); Log.Fatal("Test Fatal!!"); #endregion
SourceContext赋值方式
方式1:手动指定上下文
调用ForContext方法手动指定SourceContext的值:
// 给当前日志实例指定SourceContext为"CustomClass" var logger = Log.ForContext("SourceContext", "CustomClass"); logger.Information("这是带SourceContext的日志");
方式2:依赖注入自动赋值
如果是在ASP.NET Core等支持依赖注入的场景中,注入泛型ILogger<T>时,Serilog会自动将泛型参数T的完整类型名作为SourceContext的值,无需手动赋值:
public class HomeController : Controller { private readonly ILogger<HomeController> _logger; // 注入的ILogger<HomeController>自动会把SourceContext设为HomeController的完整类型名 public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { _logger.Information("访问首页"); return View(); } }
内容的提问来源于stack exchange,提问作者FrankGarica
相关产品推荐
相关产品推荐

