【问题标题】:ASP.NET Core ILogger does not log to Trace unless a debugger is attached除非附加了调试器,否则 ASP.NET Core ILogger 不会记录到 Trace
【发布时间】:2020-02-01 07:05:22
【问题描述】:

我遇到一种奇怪的情况,除非附加了调试器(即使我在调试配置中运行),否则我无法从 ASP.NET Core ILogger<T> 接收任何跟踪。首先让我解释一下:

我需要按日期将日志写入文件,我之前为此编写了一个简单的自定义 TraceListener,所以我认为我可以在不编写新的 Log Provider 的情况下重用它:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureLogging(logging =>
            {
                logging.AddTraceSource("IISLogCleaner");
                // I added below line to make sure I am not missing anything
                logging.SetMinimumLevel(LogLevel.Trace);
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

Startup.ConfigureServices()中,我添加了监听器:

            var listener = new DailyTraceListener(folder);
            Trace.Listeners.Add(listener);

现在是记录后台任务:

    ILogger<CleanupTask> logger;

    public CleanupTask(ILogger<CleanupTask> logger)
    {
        this.logger = logger;
    }

    // ...

    async Task<int> WorkAsync(CancellationToken token)
    {
        System.Diagnostics.Debug.WriteLine("Start Working");
        this.logger.LogInformation("Start working");

        await Task.Delay(1000);

        this.logger.LogInformation("Work finished");
        return await Task.FromResult(10000);
    }

问题出在:附加调试器后,所有日志都写入日志文件。但是,当我选择 Run without Debugging 时,即使在 Debug 配置中,也没有创建文件,没有写入内容,直到我添加了 Debug.WriteLine 调用,现在只有这些行被记录,但所有 logger.LogInformation() 都没有被记录.

但是,输出窗口接收所有消息:

为了安全起见,我删除了appsettings.Development.json 文件,只剩下appsettings.json。以下是日志内容:

"Logging": {
    "LogLevel": {
        "Default": "Information",
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
    }
},

【问题讨论】:

    标签: c# .net asp.net-core logging trace


    【解决方案1】:

    多年以后,我知道,但我相信你正在打这个:

    ASP.Net Core Logging and DebugView.exe

    我今天在这个上花了 3 个小时,感觉你的油漆


    TL;DR:Debugger.IsAttached 在 Microsoft.Extensions.Logging.Debug 中进行检查。

    【讨论】:

    • 该死!我不记得我是如何解决的,可能是我自己编写了实现或使用了第三方。现在很想知道为什么。
    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 2018-08-24
    • 2010-09-27
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多