【问题标题】:How do I get NLog to integrate correctly with .NET console logging and recognized by the IDE?如何让 NLog 与 .NET 控制台日志记录正确集成并被 IDE 识别?
【发布时间】:2018-06-10 18:05:24
【问题描述】:

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

注意日志级别“信息”是如何着色的。显然,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 控制台日志,因为无论如何默认记录器仍然处于活动状态。这是因为默认记录器仅适用于使用依赖注入的控制器,我没有看到在所有类中使用它的简单方法,而 NLog 很容易通过以下方式添加到任何类中:

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

所以,我有两个选择:

  • 使 IDE 识别的 nlog 控制台消息与识别默认记录器消息的方式类似。
  • 使默认的 Microsoft 记录器可用于任何类,而无需复杂的依赖注入,并确保它仍将所有消息路由到 NLog 记录器(因为我仍然需要具有压缩、归档和其他 nlog 功能的 nlog 文件记录规则)李>

【问题讨论】:

  • 您应该能够使用依赖注入在任何类中注入 ILogger。就像您在控制器中所做的那样。 NLog 可能很有用,但你给出的理由并不是一个真正有效的理由。

标签: asp.net logging .net-core nlog rider


【解决方案1】:

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

你可以尝试这样的方法来获得你想要的布局。

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

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

【讨论】:

  • 这不是我一直在寻找的答案,但它仍然实现了目标:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2017-03-31
相关资源
最近更新 更多