asp.net核心中Nlog的正确配置是什么。我遵循了这个tutorial并且记录器正常工作,除了在数据库中写入。 我一直收到这个错误(内部nlog),
2017-08-30 18:05:39.8956写入数据库时出错错误。 例外:System.Data.SqlClient.SqlException(0x80131904):无效 对象名称'dbo.Log'。在 System.Data.SqlClient.SqlConnection.OnError(SqlException异常, 布尔值breakConnection,Action`1 wrapCloseInAction)at System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXCEPTION exception,Boolean breakConnection,Action`1 wrapCloseInAction)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔& dataReady)at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior,String resetOptionsString)at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async,Int32超时,任务& task,Boolean asyncWrite,SqlDataReader ds)at System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream, TaskCompletionSource`1完成,Int32超时,任务&任务,布尔值 asyncWrite,String方法)at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion,Boolean sendToPipe,Int32 timeout,Boolean asyncWrite, String methodName)at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at NLog.Targets.DatabaseTarget.WriteEventToDatabase(LogEventInfo logEvent)在NLog.Targets.DatabaseTarget.Write(LogEventInfo logEvent)ClientConnectionId:fa24cf47-f585-4d2d-af29-134c8b4be13c 错误号码:208,状态:1,等级:16
数据库(ARTCore)中存在表dbo.Log
。
我的nlog.config
<?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="D:\SQLCORE\RazorCore\ArtCore\ArtCore\Logs\internal-nlog.txt">
<targets>
<target xsi:type="File" name="allfile" fileName="${var:configDir}\nlog-all.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />
<target xsi:type="File" name="ownFile-web" fileName="${var:configDir}\nlog-own.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}| ${message} ${exception}" />
<target xsi:type="Null" name="blackhole" />
<target name="ARTCore" xsi:type="Database" >
<commandText>
insert into dbo.Log (
Application, Logged, [Level], Message,
Logger, CallSite, Exception
) values (
@Application, @Logged, @Level, @Message,
@Logger, @Callsite, @Exception
);
</commandText>
<parameter name="@application" layout="AspNetCoreNlog" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@message" layout="${message}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@callSite" layout="${callsite:filename=true}" />
<parameter name="@exception" layout="${exception:tostring}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="allfile" />
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
<logger name="*" minlevel="Trace" writeTo="ARTCore" />
</rules>
</nlog>
appsettings.json:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"ElasticsearchUrl": "http://localhost:44303",
"ConnectionStrings": {
"ARTCore": "Server=****;Database=ARTCore;Trusted_Connection=True;MultipleActiveResultSets=true;"
}
}
注册
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddNLog();
app.AddNLogWeb();
env.ConfigureNLog("nlog.config");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
//LogManager.ReconfigExistingLoggers();
LogManager.Configuration.Variables["ConnectionStrings"] = Configuration.GetConnectionString("ARTCore");
LogManager.Configuration.Variables["configDir"] = "D:\\SQLCORE\\RazorCore\\ArtCore\\ArtCore\\Logs";
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
}
我在这里缺少什么?
答案 0 :(得分:1)
解决,
添加
connectionString="${var:ConnectionStrings}"
,
并包括<PackageReference Include="System.Data.SqlClient" Version="4.4.0" />
startup.cs
中的工作配置是,
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
env.ConfigureNLog("nlog.config");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
loggerFactory.AddNLog();
app.AddNLogWeb();
LogManager.Configuration.Variables["ConnectionStrings"] = Configuration.GetConnectionString("ARTCore");
LogManager.Configuration.Variables["configDir"] = "D:\\SQLCORE\\RazorCore\\ArtCore\\ArtCore\\Logs";
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
}
而nlog.config
是
<?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"
keepVariablesOnReload="true"
internalLogLevel="Warn"
throwExceptions="false"
internalLogFile="D:\SQLCORE\RazorCore\ArtCore\ArtCore\Logs\internal-nlog.txt">
<targets>
<target xsi:type="File" name="allfile" fileName="${var:configDir}\nlog-all.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />
<target xsi:type="File" name="ownFile-web" fileName="${var:configDir}\nlog-own.log"
layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}| ${message} ${exception}" />
<target xsi:type="Null" name="blackhole" />
<target name="ARTCore" xsi:type="Database" connectionString="${var:ConnectionStrings}" >
<commandText>
insert into dbo.Log (
Application, Logged, [Level], Message,
Logger, CallSite, Exception
) values (
@Application, @Logged, @Level, @Message,
@Logger, @Callsite, @Exception
);
</commandText>
<parameter name="@application" layout="AspNetCoreNlog" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@message" layout="${message}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@callSite" layout="${callsite:filename=true}" />
<parameter name="@exception" layout="${exception:tostring}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="allfile" />
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
<logger name="*" minlevel="Trace" writeTo="ARTCore" />
</rules>
</nlog>