NLog - 初始化字符串的格式不符合从索引 0 开始的规范

NLog - Format of the initialization string does not conform to specification starting at index 0

我看到有很多帖子提到了这个问题。我读过它们,我看不出我写的代码有什么问题。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.mono2.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        internalLogLevel="info"
        internalLogFile="c:\log.txt">
    <targets>
        <target type="Database"
                name="database"
                connectionstring="NLogPriMIODbConnection">
            <commandText>
                exec dbo.usp_InsertLogEntry @logLevel, @createDate, null,
                                     @message, null, @exception, @stackTrace, @origin
            </commandText>
            <parameter name="@createDate"
                        layout="${longdate}" />
            <parameter name="@origin"
                        layout="${callsite}" />
            <parameter name="@logLevel"
                        layout="${level}" />
            <parameter name="@message"
                        layout="${message}" />
            <parameter name="@exception"
                        layout="${exception:format=Message,StackTrace}" />
            <parameter name="@stackTrace"
                        layout="${stacktrace}" />
        </target>
    </targets>

    <rules>
        <logger name="*"
                minlevel="Trace"
                writeTo="database" />
    </rules>
</nlog>

连接字符串遵循 http://www.connectionstrings.com/ 2012SQL 标准

<connectionStrings>
    <add 
       name="NLogPriMIODbConnection" 
       connectionString="Server=.\SQLExpress;Database=local.XXX;User Id=sa;Password=XXX;" 
       providerName="System.Data.SqlClient" />
  </connectionStrings>

我怎么找不到这个神秘的问题?

谢谢

在您的 NLog 配置中,您使用了 connectionstring,它需要实际的字符串(即服务器、用户名、密码等)。如果您希望它使用 web/app 配置中的命名连接字符串,则需要改用 connectionstringname

这就是我使用您的值时的样子,将连接字符串作为目标的嵌套节点。我确定还有其他方法可以做到这一点,但这就是我当前的配置方式,并且可以正常工作。

或者,如果您希望从 app.config 中提取连接字符串(如其他答案中所述),您将需要使用 ConnectionStringName prop

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.mono2.xsd"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     internalLogLevel="info" internalLogFile="c:\log.txt">
  <targets>
    <target type="Database" name="database">
      <connectionStrings>
        <add name="NLogPriMIODbConnection" connectionString="Server=.\SQLExpress;Database=local.XXX;User Id=sa;Password=XXX;" providerName="System.Data.SqlClient" />
      </connectionStrings>
      <commandText>
        exec dbo.usp_InsertLogEntry @logLevel, @createDate, null, @message, null, @exception, @stackTrace, @origin
      </commandText>
      <parameter name="@createDate" layout="${longdate}" />
      <parameter name="@origin" layout="${callsite}" />
      <parameter name="@logLevel" layout="${level}" />
      <parameter name="@message" layout="${message}" />
      <parameter name="@exception" layout="${exception:format=Message,StackTrace}" />
      <parameter name="@stackTrace" layout="${stacktrace}" />
    </target>
  </targets>

  <rules>
    <logger name="*" minlevel="Trace"  writeTo="database" />
  </rules>
</nlog>