C# 要使用NLog在其他文件中记录数据库连接失败问题吗

C# 要使用NLog在其他文件中记录数据库连接失败问题吗,c#,.net-core,asp.net-core-webapi,nlog,C#,.net Core,Asp.net Core Webapi,Nlog,我正在使用.NETCore2.2和MySQL。 使用NLog将应用程序的常规日志记录到数据库中,但我只想将数据库错误(如果在记录时发生)记录到文件中 如何使用自定义字段(如UserID)捕获文件的DB连接故障。 以下是NLog.config的代码: <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="ht

我正在使用.NETCore2.2和MySQL。 使用NLog将应用程序的常规日志记录到数据库中,但我只想将数据库错误(如果在记录时发生)记录到文件中

如何使用自定义字段(如UserID)捕获文件的DB连接故障。

以下是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"
  throwExceptions="false"
  internalLogLevel="Warn"
  internalLogFile="D:\logs\New\internal-nlog.txt">
<targets>
<target name="database" xsi:type="Database"
          dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" 
connectionString="${var:myConnectionstring}">

 <commandText>
    insert into log (
     Logged,  Message,
     CallSite, Exception, userID
    ) values (
     @Logged, @Message,
     @Callsite, @Exception, @userID
    );
  </commandText>

  <parameter name="@logged" layout="${date}" />
  <parameter name="@message" layout="${message}" />
  <parameter name="@callSite" layout="${event-properties:Callsite}" />
  <parameter name="@exception" layout="${exception:tostring}" />
  <parameter name="@userID" layout="${event-properties:userID}" />
</target>
</targets>
<rules>
<logger name="*" level="Error" writeTo="database" />

</rules>
</nlog>

你能给我们看一下你的日志代码吗?它会更有用。请不要使用
Logger.SetProperty
你将进入一个痛苦的世界。改为使用LogEvent Properties Dictionary显示以下示例:尝试激活NLog内部记录器,查看在登录到数据库时是否存在任何错误:
Logger logger = LogManager.GetCurrentClassLogger();
                LogManager.Configuration.Variables["myConnectionstring"]=Setting.connString;
                LogManager.ReconfigExistingLoggers();

                logger.SetProperty("userID", "UR0001");
                logger.SetProperty("Callsite", ex.Error.TargetSite.Name);

                logger.LogException(NLog.LogLevel.Error, ex.Error.Message,ex.Error);