NLog 添加数据库模式名称

NLog adding a database schema name

我不确定是否可以将数据库架构添加到 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>

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

Error DatabaseTarget(Name=database): Error when writing to database. Exception: System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'AppDB.ASTONE.EventLogs'.

我已经查看了 NLog wiki,但它似乎也没有任何内容。

这是凭记忆,但我认为您的 commandText 值应该是这样的:

commandText="[ASTONE].[EventLogs]"

分隔符.需要方括号之外。

由于您在连接字符串中指定了数据库名称,因此您不需要将其作为命令文本的一部分。

更新了新信息

因为 ASTONE.EventLogs 是一个 table,您需要编写一个存储过程来将您的参数值插入其中。那是你遗漏的部分。

这是一个示例存储过程:

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 table 以及参数的类型和定义。

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

 commandText="[ASTONE].[LogEvent]"