NLog数据库目标

时间:2018-10-02 12:44:03

标签: c# asp.net .net database nlog

我在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">

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

    <targets>

    <target name="dbTarget"
      xsi:type="Database"
      connectionString="Server=SERVER;Database=Log;Trusted_Connection=True;"
      commandText="INSERT INTO Logs(LogTime, LogLevel, Message) VALUES (@LogTime, @LogLevel, @Message);">

      <!-- Parameters to log -->
      <parameter name="@LogTime" layout="${longdate}"/>
      <parameter name="@LogLevel" layout="${level}"/>
      <parameter name="@Message" layout="${message}"/>

    </target>

    </targets>

<rules>
    <logger name="dbLogger" minlevel="Trace" writeTo="dbTarget" />
</rules>

</nlog>

在代码中,我的记录器是这样的。

var logger = NLogBuilder.ConfigureNLog("nlog.config").GetLogger("dbLogger");

但是它不起作用。如果添加文件规则,它将记录到文件中,因此我的猜测是我的dbTarget配置错误。

3 个答案:

答案 0 :(得分:0)

您尝试删除最后一个“;”从commandText:

<target name="dbTarget"
  xsi:type="Database"
  connectionString="Server=SERVER;Database=Log;Trusted_Connection=True;"
  commandText="INSERT INTO Logs(LogTime, LogLevel, Message) VALUES (@LogTime, @LogLevel, @Message)">

答案 1 :(得分:0)

尝试在目标标记中包含dbProvider属性。使用适合您数据库的正确值设置dbProvider属性。您可以在此处找到值:https://github.com/nlog/NLog/wiki/Database-target#connection-options

答案 2 :(得分:0)

尝试修改连接字符串:

connectionString="Data Source=SERVER;Initial Catalog=Log;Integrated Security=True;" 
dbProvider="System.Data.SqlClient"