NLog添加数据库架构名称

时间:2018-12-28 23:27:16

标签: asp.net logging asp.net-core nlog

我不确定是否可以向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:\temp\internallog.txt">
  <targets>
    <target name="logfile" xsi:type="File"
            fileName="C:\temp/${shortdate}_logfile.txt"
            layout="${longdate} ${level:uppercase=true} ${message}"/>


    <target xsi:type="Database" name="database"
            connectionString="Server=.\SQLEXPRESS;Database=AppDB;Trusted_Connection=True;MultipleActiveResultSets=true;User Id=AppDBUser;Password=PSSWRD!"
            commandType="StoredProcedure"
            commandText="[AppDB].[ASTONE.EventLogs]">
        <parameter name="@message" layout="${message}" />
        <parameter name="@level" layout="${level}" />
        <parameter name="@logger" layout="${logger}" />
        <!--<dbProvider>System.Data.SqlClient</dbProvider>-->
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Info" writeTo="logfile" />
    <logger name="*" minlevel="Info" writeTo="database" />
  </rules>
</nlog>

但是,这给了我这个错误:

  

错误DatabaseTarget(Name = database):写入数据库时​​出错。   异常:System.Data.SqlClient.SqlException(0x80131904):无法   找到存储过程“ AppDB.ASTONE.EventLogs”。

我浏览了NLog Wiki,但似乎也没有。

1 个答案:

答案 0 :(得分:3)

这是从内存中获取的,但是我认为您的commandText值必须是这样:

commandText="[ASTONE].[EventLogs]"

分隔的.必须在方括号的外部

由于您在连接字符串中指定了数据库名称,因此在命令文本中不需要它。

更新了新信息

由于ASTONE.EventLogs是一个表,您将需要编写一个存储过程以将参数值插入其中。那是你丢失的那一块。

这是一个示例存储过程:

CREATE PROC [ASTONE].[LogEvent] 
(
   @message nvarchar(max),
   @level   int,
   @logger  nvarchar(1024)
)
AS 
  INSERT INTO [ASTONE].[EventLogs]
  ( message, level, logger )
  VALUES( @message, @level, @logger)

我正在猜测您的EventLogs表的布局以及参数的类型和定义。

然后您的commandText属性如下所示:

 commandText="[ASTONE].[LogEvent]"