写入数据库时​​出现Nlog错误,asp core 2中Nlog的正确配置是什么?

时间:2017-08-31 01:24:56

标签: nlog asp.net-core-2.0

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?}");
            });
        }

我在这里缺少什么?

1 个答案:

答案 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>

Reference