如何让 NLog 与 .NET 控制台日志记录正确集成并被 IDE 识别?

How do I get NLog to integrate correctly with .NET console logging and recognized by the IDE?

我有一个使用 .NET Core 2 的 ASP.NET 项目,我注意到当我使用 ASP.NET 提供的默认记录器(作为 ILogger 注入到任何控制器中)时,我看到格式化的日志消息如下:

注意日志级别 "info" 是如何着色的。显然,IDE 识别出这是一条记录器消息并以某种特殊方式处理它。

但是,如果我改为使用 NLog,则执行以下操作:

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseNLog() // add this line!
            .Build();

在 Program.cs 中,没有任何进一步的代码更改

然后这会将所有日志消息路由到 nlog 处理器,处理器将根据 nlog.config 文件中的 nlog 日志记录规则处理日志记录。因此,例如,如果我有一条要打印到控制台的规则,那么我会看到以下内容:

(请注意,默认的 Microsoft 记录器仍处于活动状态!并且仍会像第一张图片一样再次打印相同的消息)

现在,我真正的问题是,有没有办法让所有 nlog 控制台日志消息以与来自默认记录器的消息相同的方式显示?

您可能想知道为什么我需要 nlog 控制台日志,因为默认记录器仍然处于活动状态。这是因为默认记录器仅适用于使用依赖注入的控制器,我没有看到在我的所有 class 中使用它的简单方法,而 NLog 很容易添加到任何 class 通过做:

    private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

所以,我有两个选择:

您的 NLog.Config 文件中的布局是什么样的?

您可以尝试这样的操作来获得您想要的布局。

Layout="${level:uppercase=false}: ${logger}${newline}${message}"

NLog 有一个 ColoredConsole 目标,如果布局在 ASP.Net 记录器中没有这样做,它可能会为您提供您正在寻找的颜色。