You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 11:51:01