首页 > 解决方案 > Logger Begin Scope 不适合我!.net 核心

问题描述

所以这是我的日志配置:

public static void Main(string[] args)
{
    var configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .Build();

    Log.Logger = new LoggerConfiguration()
        .Enrich.FromLogContext()
        .WriteTo.Console()
        .WriteTo.File("C:HotelServiceLog.txt")
        .CreateLogger();

    //Log.Logger = Loggers.NewSerilogLogger(configuration);

    try {
        Log.Information("Starting up");
        CreateHostBuilder(args).Build().Run();
    }
    catch (Exception ex) {
        Log.Fatal(ex, "Application start-up failed");
    }
    finally {
        Log.CloseAndFlush();
    }
}

我只是想从控制器方法中做到这一点

public async Task<ActionResult<ExpediaRegionsResponse>> GetRegionDescendantsById([FromBody] ExpediaRegionsRequest request) {
    try {

        using (_logger.BeginScope("Controller Scope")) {
            _logger.LogInformation("Controller processing");
        }
        ...
    }
}

但这就是我在日志中得到的

2020-12-07 12:09:26.511 -05:00 [INF] Controller processing
2020-12-07 12:09:26.529 -05:00 [INF] Controller processing

有什么我想念的吗?

标签: asp.net-coreloggingilogger

解决方案


如果你想看到你的内容BeginScope,你必须先结构化日志。你可以在这篇文章中看到更多的细节。

一些最流行的选项是使用 Kibana 前端将日志存储在 Elastic Search 中,或者使用 Seq。Serilog 日志记录提供程序还支持结构化日志记录,通常用于写入这两个目标。

您正在使用 serilog,这是一个使用 Seq 结构的示例。

1:下载序列

2:在 Visual Studio 包管理器控制台输入:

Install-Package Serilog.Sinks.Seq -DependencyVersion Highest
Install-Package Serilog.Sinks.Console

3:在您的日志记录配置中:

Log.Logger = new LoggerConfiguration()
            //......
            .WriteTo.Seq("http://localhost:5341")
            //......

4:运行您的项目并执行您的操作。GetRegionDescendantsById访问 URL http://localhost:5341

您可以在此处查看详细信息。

测试结果: 在此处输入图像描述


推荐阅读