【问题标题】:Using NLog with asp-net layout renderers in AspNet vNext (MVC 6)在 AspNet vNext (MVC 6) 中使用 NLog 和 asp-net 布局渲染器
【发布时间】:2016-02-06 17:02:16
【问题描述】:

我正在尝试将 NLog 集成到 AspNet 5(或使用新名称 AspNet Core 1.0)网络应用程序中。不确定是否有可能,但我想记录当前登录的用户。 这是我的 NLog 配置文件。

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true">
  <targets>
    <target name="logfile"
            xsi:type="File"
            fileName="file.txt"
            layout="${longdate}|${message}|${identity}|${aspnet-user-identity}" />
  </targets>
  <rules>
    <logger name="WebApplication2.*" minlevel="Info" writeTo="logfile" />
  </rules>
</nlog>

问题是我得到了

System.ArgumentException: 找不到 LayoutRenderer: 'aspnet-user-identity'

我的 project.json 文件如下所示:

  "dependencies": {
    .....
    "NLog.Framework.logging": "1.0.0-rc1-final",
    "NLog": "4.4.0-alpha1",
    "NLog.Config": "4.3.0-beta1",
    "NLog.Extended": "4.0.0-rc",
    "NLog.Web": "4.1.0"
  },

也许我遗漏了什么,或者 NLog 还不支持它?

编辑:我发现目前不支持自动加载扩展。所以,我必须像这样修改我的 NLog.config:

 <extensions>
    <add assembly="NLog.Web"/>
    <add assembly="NLog.Extended"/>
  </extensions>

但现在我得到当前用户的空白输入。有什么想法吗?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-core nlog


    【解决方案1】:

    internal log 将提供更多信息,说明加载扩展失败的原因。

    还有其他加载扩展的方法,assemblyFile attribute 和以编程方式:

    //target
    ConfigurationItemFactory.Default.Targets
                            .RegisterDefinition("MyFirst", typeof(MyNamespace.MyFirstTarget));
    
    //layout renderer
    ConfigurationItemFactory.Default.LayoutRenderers
                            .RegisterDefinition("hello-world", typeof(MyNamespace.HelloWorldLayoutRenderer ));
    

    编辑:做了一些测试。这适用于加载程序集:

    <extensions> <add assembly="NLog.Web" /> </extensions>

    但是太糟糕了NLog.Web isn't ASP.NET 5 compatible, yet。我们不能在那里使用HttpContext.Current

    编辑: NLog.Web 的 ASP.NET 5 兼容版本现已推出!见NuGet

    【讨论】:

    • 是的,我直接在 github 的 repo 中查看。我一看到它使用 HttpContext.Current,就意识到将无法使用它。无论如何,作为一个临时解决方案,我将创建自己的 ILogger 实现,该实现在内部使用 NLog。因此,我将拥有更多控制权,并且可以通过任何我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多