2016-11-18 7 views
2

Dies ist sehr verwandt mit this question, aber für .net Core. Ich habe einen benutzerdefinierten Layout-Renderer, der UserId hinzufügt, und es funktionierte, bis ich versuchte, von "net461" in project.json auf "netcoreapp1.0" zu aktualisieren. Als ich das tat, hatte ich NLog.Extensions zu entfernen, weil es mir diesen Fehler gab:NLog mit .Net Core 1.0 - LayoutRenderer kann nicht gefunden werden

Package NLog.Extensions 1.0.1 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package NLog.Extensions 1.0.1 supports: net45 (.NETFramework,Version=v4.5) 

Alles kompiliert gut, aber zur Laufzeit, bekomme ich diesen Fehler in der internen nlog.txt Protokolldatei und die natürlich ist es nicht meine benutzerdefinierte Layout-Renderer getroffen .:

NLog.NLogConfigurationException: Error when setting property 'Layout' on NLog.Targets.DatabaseParameterInfo ---> System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-user-id' 

gibt es einen Ersatz für NLog.Extensions, oder bin ich etwas fehlt?

Hier sind die Referenzen von project.json:

"NLog.Extensions.Logging": "1.0.0-rtm-alpha4", 
"NLog.Web.AspNetCore": "4.2.4" }, 

ich alles in Startup.cs und NLog.config konfiguriert haben genau die gleiche wie vor dem Wechsel Framework-Versionen war. Wenn es hilfreich ist, diese zu veröffentlichen, lass es mich wissen und ich werde das tun. Ich schätze die Hilfe.

Edit: Hinzugefügt project.json Inhalt

"dependencies":{ 
    "Microsoft.NETCore.App":{ 
     "version":"1.0.1", 
     "type":"platform" 
    }, 
    "Microsoft.AspNetCore.Authentication.Cookies":"1.0.0-*", 
    "Microsoft.AspNetCore.Diagnostics":"1.0.0-*", 
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore":"1.0.0-*", 
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore":"1.0.0-*", 
    "Microsoft.AspNetCore.Mvc":"1.0.0-*", 
    "Microsoft.AspNetCore.Server.IISIntegration":"1.0.0-*", 
    "Microsoft.AspNetCore.Server.Kestrel":"1.1.0-preview1-final", 
    "Microsoft.AspNetCore.StaticFiles":"1.0.0-*", 
    "Microsoft.EntityFrameworkCore.SqlServer":"1.1.0-preview1-final", 
    "Microsoft.EntityFrameworkCore.Tools":"1.0.0-*", 
    "Microsoft.Extensions.Configuration":"1.1.0-preview1-final", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables":"1.1.0-preview1-final", 
    "Microsoft.Extensions.Options.ConfigurationExtensions":"1.0.0-*", 
    "Microsoft.Extensions.Configuration.Json":"1.0.0-*", 
    "Microsoft.Extensions.Configuration.UserSecrets":"1.0.0-*", 
    "Microsoft.Extensions.Logging":"1.1.0-preview1-final", 
    "Microsoft.Extensions.Logging.Console":"1.0.0-*", 
    "Microsoft.Extensions.Logging.Debug":"1.0.0-*", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader":"14.0.0-rc2-final", 
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc":{ 
     "version":"1.0.0-*", 
     "type":"build" 
    }, 
    "RestSharp.NetCore":"105.2.3", 
    "Dapper":"1.50.2", 
    "NLog.Extensions.Logging":"1.0.0-rtm-alpha4", 
    "NLog.Web.AspNetCore":"4.2.4" 
}, 
"tools":{ 
    "Microsoft.AspNetCore.Razor.Tools":{ 
     "version":"1.0.0-*", 
     "imports":"portable-net45+win8+dnxcore50" 
    }, 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools":{ 
     "version":"1.0.0-*", 
     "imports":"portable-net45+win8+dnxcore50" 
    }, 
    "Microsoft.EntityFrameworkCore.Tools":{ 
     "version":"1.0.0-*", 
     "imports":[ 
      "portable-net45+win8+dnxcore50", 
      "portable-net45+win8" 
     ] 
    }, 
    "Microsoft.Extensions.SecretManager.Tools":{ 
     "version":"1.0.0-*", 
     "imports":"portable-net45+win8+dnxcore50" 
    } 
}, 
"frameworks":{ 
    "netcoreapp1.0":{ 
     "imports":[ 
      "dotnet5.6", 
      "portable-net45+win8" 
     ] 
    } 
} 
+0

Welche Frameworks zielen auf Ihre benutzerdefinierte NLog-Ext-Bibliothek ab? (Project.json) – Julian

+0

Hi @Julian. Ich hatte gehofft, du würdest diese Frage sehen. Ich dachte, wenn jemand die Antwort wüsste, würdest du es tun. Ich fügte die relevanten project.json Teile hinzu. Vielen Dank! –

Antwort

1

Angenommen, Sie wir this NLog.Extensions package verwenden - es ist NETSTANDARD nicht unterstützt, so dass Sie es nicht mit netcoreapp1.0 können

Upgrade für ASP.NET (zu ASP.NET Core) ist nicht trivial und es scheint, dass die Bibliothek nicht mehr aktiv ist.

Zum Glück gibt es eine aspnet-user-identity in NLog.Web.AspNetCore, die Sie bereits enthalten haben.

ersetzen So ${aspnet-user-id} mit ${aspnet-user-identity}

+0

Dritter Versuch ...: O – Julian

+0

Danke. Der benutzerdefinierte LayoutRenderer soll tatsächlich über $ {aspnet-user-identity} (eine E-Mail-Adresse) hinausgehen, da wir stattdessen die Benutzer-ID protokollieren müssen, da sich die E-Mail-Adressen im Laufe der Zeit ändern können. Ich denke, ich muss einen anderen Weg finden, die Benutzer-ID zu speichern. –

+0

Wenn dies immer noch nicht das ist, was Sie suchen, können Sie ein Problem auf GitHub erstellen: https://github.com/NLog/NLog – Julian

0

Ich weiß nicht, warum, aber wenn ich aus dem E-Mail-Ziel und Logger kommentiert, begann der Brauch LayoutRenderer wieder zu arbeiten. Als Referenz hier ist die aktuelle nlog.config-Datei, mit E-Mail-Zeug auskommentiert.

<?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" 
    internalLogLevel="Warn" 
    internalLogFile="C:\temp\Logs\internal-nlog.txt"> 

<targets> 
<target xsi:type="Null" name="blackhole" /> 
<target name="database" xsi:type="Database" > 

    <connectionString> 
    Server=localhost;Database=LogDatabase;Trusted_Connection=True;MultipleActiveResultSets=true 
    </connectionString> 

    <commandText> 
    insert into dbo.Log (
     UserId, Application, LogDate, Level, Message, Exception 
    ) values (
     @User, @Application, @Logged, @Level, @Message, @Exception 
    ); 
    </commandText> 

    <parameter name="@application" layout="WebApplicationNameHere" /> 
    <parameter name="@logged" layout="${date}" /> 
    <parameter name="@level" layout="${level}" /> 
    <parameter name="@message" layout="${message}" /> 
    <parameter name="@user" layout="${aspnet-user-id} " /> <!-- This is a custom attribute, set in NLogHelper.cs--> 
    <parameter name="@exception" layout="${exception:tostring}" /> 
</target> 

<!--<target name="email" xsi:type="Mail" 
     subject="System Error" 
     body="Date-Time:${newline}${longdate}${newline}${newline}Machine:${newline}${machinename}${newline}${newline}User:${newline}${aspnet-user-identity} ${newline}${newline}Message:${newline}${message}" 
     to="[email protected]" 
     from="[email protected]" 
     Encoding="UTF-8" 
     smtpUsername="[email protected]" 
     enableSsl="true" 
     smtpPassword="passwordgoeshere" 
     smtpAuthentication="Basic" 
     smtpServer="smtp.mailgun.org" 
     smtpPort="587" 
/> --> 
</targets> 
<rules> 
<!--Skip Microsoft's verbose logging --> 
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /> 
<logger name="*" minlevel="Trace" writeTo="database" /> 
<!--<logger name="*" level="Error" writeTo="email"/>--> 
</rules> 
<extensions> 
    <!--enable NLog.Web for ASP.NET Core--> 
    <add assembly="NLog.Web.AspNetCore"/> 
</extensions> 
</nlog> 

Wenn ich den E-Mail-Teil Kommentar-, erhalte ich den Fehler unten, das sagt nichts über den E-Mail-Abschnitt ein Problem. Der einzige Grund, warum ich es sogar ohne den E-Mail-Bereich versuchte, war, dass ich merkte, dass ich E-Mails erhielt, wenn eine Ausnahme passierte, und jetzt tue ich es nicht und versuchte das zu beheben.

2016-11-22 12:42:13.7563 Warn Error has been raised. Exception: NLog.NLogConfigurationException: Error when setting property 'Layout' on NLog.Targets.DatabaseParameterInfo ---> System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-user-id' 
at NLog.Config.Factory`2.CreateInstance(String name) 
at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr) 
at NLog.Layouts.LayoutParser.CompileLayout(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr, Boolean isNested, String& text) 
at NLog.Layouts.SimpleLayout.set_Text(String value) 
at NLog.Internal.PropertyHelper.TryNLogSpecificConversion(Type propertyType, String value, Object& newValue, ConfigurationItemFactory configurationItemFactory) 
at NLog.Internal.PropertyHelper.SetPropertyFromString(Object obj, String propertyName, String value, ConfigurationItemFactory configurationItemFactory) 
--- End of inner exception stack trace --- 
at NLog.Internal.PropertyHelper.SetPropertyFromString(Object obj, String propertyName, String value, ConfigurationItemFactory configurationItemFactory) 
at NLog.Config.XmlLoggingConfiguration.ConfigureObjectFromAttributes(Object targetObject, NLogXmlElement element, Boolean ignoreType) 
at NLog.Config.XmlLoggingConfiguration.AddArrayItemFromElement(Object o, NLogXmlElement element) 
at NLog.Config.XmlLoggingConfiguration.SetPropertyFromElement(Object o, NLogXmlElement element) 
at NLog.Config.XmlLoggingConfiguration.ParseTargetElement(Target target, NLogXmlElement targetElement) 
at NLog.Config.XmlLoggingConfiguration.ParseTargetsElement(NLogXmlElement targetsElement) 
at NLog.Config.XmlLoggingConfiguration.ParseNLogElement(NLogXmlElement nlogElement, String filePath, Boolean autoReloadDefault) 
at NLog.Config.XmlLoggingConfiguration.Initialize(XmlReader reader, String fileName, Boolean ignoreErrors) 
+1

Dies liegt daran, dass das E-Mail-Ziel in NLog für .NET Core nicht unterstützt wird. da Microsoft System.mail nicht portiert hat. Bitte überprüfen Sie https://github.com/NLog/NLog/wiki/platform-support – Julian

+0

Danke @Julian. Ihre Hilfe und Ihre Arbeit an NLog wird sicherlich geschätzt. –

0

In Ihrer NLog.config Datei unter dem Knoten Add folgende

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

Hope this beantwortet Ihre quesetion.

+0

Können Sie näher erläutern, was diese Zeile macht? –

Verwandte Themen