2

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

我正在尝试按照此处的示例来实现 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'
4

3 回答 3

4

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

于 2015-06-06T05:48:01.337 回答
1

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
    }
    
于 2016-01-21T20:32:49.303 回答
0

在处理 MVC6(dnx 的东西)中的 MVC 工具时,这个问题的答案非常流畅。

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

我只需要在 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();
}

我认为这是一个权宜之计,因为 Microsoft 正在引入一个新的 Logging 接口(我希望最终会像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”

于 2016-01-28T14:59:17.653 回答