.net Core 2.0 的 NLog 数据库目标
NLog Database Target for .net Core 2.0
我正在尝试使用 .net Core 2.0 中的 NLog 将各种日志写入数据库和文件。问题是,将日志写入文件工作得很好。但是在将日志写入数据库时总是出现以下错误:
2018-01-10 08:48:29.5666 Error Error initializing target 'Database Target[db]'. Exception: System.TypeLoadException: Could not load type 'System.Data.SqlClient' from assembly 'NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c'.
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type, ObjectHandleOnStack keepalive)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName, Boolean throwOnError)
at NLog.Targets.DatabaseTarget.SetConnectionType()
at NLog.Targets.DatabaseTarget.InitializeTarget()
at NLog.Targets.Target.Initialize(LoggingConfiguration configuration)
但是我的项目中有 System.Data.SqlClient 如下:
<ItemGroup>
<PackageReference Include="EPPlus.Core" Version="1.5.4" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.2.0-beta3" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Session" Version="2.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.1" PrivateAssets="All" />
<PackageReference Include="NLog" Version="4.5.0-rc03" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.5.0-rc2" />
<PackageReference Include="System.ComponentModel" Version="4.3.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0-preview1-25914-04" />
<PackageReference Include="System.Data.SqlClient" Version="4.4.2" />
</ItemGroup>
我的 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" internalLogLevel="info" internalLogFile="C:\*****\Log2\asdaf.log">
<targets>
<target
xsi:type="File"
name="allfile"
fileName="C:\*****\Logs${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${uppercase:${level}}|${logger}|${message} ${exception}" >
</target>
<target xsi:type="Database" name="db">
<commandText>INSERT INTO [LogEntries](TimeStamp, Message, Level, Logger) VALUES(getutcdate(), @msg, @level, @logger)</commandText>
<parameter name="@msg" layout="${message}" />
<parameter name="@level" layout="${level}" />
<parameter name="@logger" layout="${logger}" />
<dbProvider>System.Data.SqlClient</dbProvider>
<connectionString>*****</connectionString>
</target>
<target xsi:type="Null" name="blackhole" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="allOutputs" />
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
我在 Github 上搜索了这个问题,但 none 的解决方案对我有用。从 Nuget 获得 System.Data.SqlClient 应该就足够了,但不幸的是,Nlog.config 先生想要别的东西,但我找不到。
这是因为我为我的数据库目标写了<dbProvider>System.Data.SqlClient</dbProvider>
。看起来有人应该更新文档。
顺便说一句,我不知道为什么删除 dbProvider 对我有用。
工作代码如下:
<?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="info" internalLogFile="C:\Users\maliozt\source\MyProjects\MapApplication\MapApplication\Log2\asdaf.log">
<targets>
<target
xsi:type="File"
name="mapFile"
fileName="C:\Users\maliozt\source\MyProjects\MapApplication\MapApplication\Logs${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${uppercase:${level}}|${logger}|${message} ${exception}" >
</target>
<target
xsi:type="Database"
name="mapDataBase">
<commandText>INSERT INTO MapApplication.dbo.LogEntries(TimeStamp, Message, Level, Logger) VALUES(GETDATE(), @message, @level, @logger)</commandText>
<parameter name="@message" layout="${message}" />
<parameter name="@level" layout="${level}" />
<parameter name="@logger" layout="${logger}" />
<!--<dbProvider>System.Data.SqlClient</dbProvider>-->
<connectionString>Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False</connectionString>
</target>
</targets>
<rules>
<logger name="*" minlevel="Warn" writeTo="mapFile" />
<logger name="*" minlevel="Error" writeTo="mapDataBase" />
</rules>
</nlog>
就我而言,我发现错误来自 table 名称
Invalid object name 'dbo.Journal'
我刚刚删除了 'dbo' 并且它有效。
我正在尝试使用 .net Core 2.0 中的 NLog 将各种日志写入数据库和文件。问题是,将日志写入文件工作得很好。但是在将日志写入数据库时总是出现以下错误:
2018-01-10 08:48:29.5666 Error Error initializing target 'Database Target[db]'. Exception: System.TypeLoadException: Could not load type 'System.Data.SqlClient' from assembly 'NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c'. at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type, ObjectHandleOnStack keepalive) at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName) at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark) at System.Type.GetType(String typeName, Boolean throwOnError) at NLog.Targets.DatabaseTarget.SetConnectionType() at NLog.Targets.DatabaseTarget.InitializeTarget() at NLog.Targets.Target.Initialize(LoggingConfiguration configuration)
但是我的项目中有 System.Data.SqlClient 如下:
<ItemGroup>
<PackageReference Include="EPPlus.Core" Version="1.5.4" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.2.0-beta3" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Session" Version="2.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.1" PrivateAssets="All" />
<PackageReference Include="NLog" Version="4.5.0-rc03" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.5.0-rc2" />
<PackageReference Include="System.ComponentModel" Version="4.3.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0-preview1-25914-04" />
<PackageReference Include="System.Data.SqlClient" Version="4.4.2" />
</ItemGroup>
我的 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" internalLogLevel="info" internalLogFile="C:\*****\Log2\asdaf.log">
<targets>
<target
xsi:type="File"
name="allfile"
fileName="C:\*****\Logs${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${uppercase:${level}}|${logger}|${message} ${exception}" >
</target>
<target xsi:type="Database" name="db">
<commandText>INSERT INTO [LogEntries](TimeStamp, Message, Level, Logger) VALUES(getutcdate(), @msg, @level, @logger)</commandText>
<parameter name="@msg" layout="${message}" />
<parameter name="@level" layout="${level}" />
<parameter name="@logger" layout="${logger}" />
<dbProvider>System.Data.SqlClient</dbProvider>
<connectionString>*****</connectionString>
</target>
<target xsi:type="Null" name="blackhole" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="allOutputs" />
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
我在 Github 上搜索了这个问题,但 none 的解决方案对我有用。从 Nuget 获得 System.Data.SqlClient 应该就足够了,但不幸的是,Nlog.config 先生想要别的东西,但我找不到。
这是因为我为我的数据库目标写了<dbProvider>System.Data.SqlClient</dbProvider>
。看起来有人应该更新文档。
顺便说一句,我不知道为什么删除 dbProvider 对我有用。
工作代码如下:
<?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="info" internalLogFile="C:\Users\maliozt\source\MyProjects\MapApplication\MapApplication\Log2\asdaf.log">
<targets>
<target
xsi:type="File"
name="mapFile"
fileName="C:\Users\maliozt\source\MyProjects\MapApplication\MapApplication\Logs${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${uppercase:${level}}|${logger}|${message} ${exception}" >
</target>
<target
xsi:type="Database"
name="mapDataBase">
<commandText>INSERT INTO MapApplication.dbo.LogEntries(TimeStamp, Message, Level, Logger) VALUES(GETDATE(), @message, @level, @logger)</commandText>
<parameter name="@message" layout="${message}" />
<parameter name="@level" layout="${level}" />
<parameter name="@logger" layout="${logger}" />
<!--<dbProvider>System.Data.SqlClient</dbProvider>-->
<connectionString>Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False</connectionString>
</target>
</targets>
<rules>
<logger name="*" minlevel="Warn" writeTo="mapFile" />
<logger name="*" minlevel="Error" writeTo="mapDataBase" />
</rules>
</nlog>
就我而言,我发现错误来自 table 名称
Invalid object name 'dbo.Journal'
我刚刚删除了 'dbo' 并且它有效。