NLog 与 DNX 核心 5.0

NLog with DNX Core 5.0

我正在尝试使用 ASP.Net 5 和 MVC 6 实现 NLog 日志记录。默认情况下,DNX 451 和 DNX Core 50 都包含在项目模板中。

我正在尝试按照示例 here.

实施 NLog 日志记录

但是,在示例应用程序中,有以下行 -

#if !DNXCORE50
            factory.AddNLog(new global::NLog.LogFactory());
#endif

如果我 运行 应用程序,此行永远不会被命中,因为 mvc 应用程序默认安装了 dnx core 50。

是否有任何可用于 DNX Core 50 的记录器?如果不是,dnx 核心在默认 mvc 应用程序中的作用是什么 - 它真的需要吗?

编辑:如果我删除上面的 #if !DNXCORE50.... 行,我会收到以下错误 -

DNX Core 5.0 error - The type or namespace name 'NLog' could not be found in the global namespace'

DNX Core 5.0 仅在您需要 .Net 框架的云优化跨平台版本时才需要;如果您仍计划仅在 Windows 环境中使用 MVC 应用程序,您可以从 project.json.

中删除 dnxcore50 框架引用

NLog for .NET Core(DNX 环境)当前可用版本 4.4.0-alpha1

步骤:

  • 创建NLog.config

    <?xml version="1.0" encoding="utf-8" ?>
    

    <targets>
        <target xsi:type="ColoredConsole" name="ToConsole" />
    </targets>
    <rules>
        <logger name="*" minlevel="Info" writeTo="ToConsole" />
    </rules>
    

  • 加载并解析配置

    private static ILogger _logger;
    public static void LoggerSetup()
    {
        var reader = XmlReader.Create("NLog.config");
        var config = new XmlLoggingConfiguration(reader, null); //filename is not required.
        LogManager.Configuration = config;
        _logger = LogManager.GetCurrentClassLogger();
    }
    
    public static void Main(string[] args)
    {
        LoggerSetup();
        // Log anything you want
    }
    

在处理 MVC6 中的 MVC 工具(dnx 东西)时,对此的回答非常流畅。

为了让 NLog 与我的网络应用程序一起工作,我必须执行几个步骤: -> 非常感谢两次 NLog 讨论(here and here)

我只需要在 Startup.cs 的构造函数中添加配置设置:

public Startup(IHostingEnvironment env)
{
    // Set up configuration sources.
    var builder = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .AddEnvironmentVariables();

    // Set up logging configuration
    // from: https://github.com/NLog/NLog/issues/641
    //  and: https://github.com/NLog/NLog/issues/1172
    var reader = XmlTextReader.Create(File.OpenRead(Path.Combine(builder.GetBasePath(),"NLog.config"))); //stream preferred above byte[] / string.
    LogManager.Configuration = new XmlLoggingConfiguration(reader, null); //filename is not required.
    log.Info("NLogger starting");

    Configuration = builder.Build();
}

我认为这有点权宜之计,因为微软正在引入一个新的日志记录界面(我希望最终会像 SLF4J.org 在 Java).不幸的是,在我写这篇文章的时候,关于它的文档有点薄。 NLog 正在努力让自己实现新的 dnx ILoggingProvider 接口。

有关我的项目设置的其他信息

  1. 我的NLog.config文件位于项目根文件夹中,旁边 project.json 和 appsettings.json。我不得不做一点挖掘 在 AddJsonFile() 中查看它们如何处理路径。
  2. 我使用 yeoman.io 和他们的 aspnet 生成器来设置 Web 项目。
  3. NLog 版本,感谢上面的 Lukasz Pyrzyk:

    "NLog":“4.4.0-alpha1”