【问题标题】:Logging with NLog and runtime parameters to Database使用 NLog 和运行时参数记录到数据库
【发布时间】:2015-09-05 07:20:51
【问题描述】:

我正在尝试使用 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">

  <variable name="sqlDate" value="[${date:format=yyyy-MM-dd HH\:mm\:ss\.fff}]"/>

  <targets>
    <target name="dataBase"
        xsi:type="Database"
        dbProvider="System.Data.SqlClient"
        connectionString="${gdc:item=myConnectionstring}"
        dbDatabase="${gdc:item=myDataBase}">
      <commandText>
        INSERT INTO [TABLE_NAME]([COL1], [COL2] )
        VALUES(@val1, @val2)
      </commandText>
      <parameter name="@val1" layout="${event-context:item=val1}"/>
      <parameter name="@val2" layout="${event-context:item=val2}"/>
    </target>
  </targets>

  <rules>
    <logger name="_dataBase" levels="Info" writeTo="dataBase" final="true" />
  </rules>
</nlog>

还有我的 .NET C# 代码:

public static class Log
{
    private static NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger();
    private static Config _config = LoadConfig();

    public static void Info(string val1, string val2)
    {
        DatabaseTarget databaseTarget = (NLog.Targets.DatabaseTarget)NLog.LogManager.Configuration.FindTargetByName("dataBase");
        databaseTarget.ConnectionString = _config.ConnectString;
        databaseTarget.DBDatabase = _config.DBName;
        NLog.LogManager.ReconfigExistingLoggers();

        LogEventInfo info = new LogEventInfo(LogLevel.Info, "_dataBase", "Test_message");
        info.Properties["val1"] = val1;
        info.Properties["val2"] = val2;

        _logger.Log(info);
    }
}

它什么也不做:不崩溃,不向数据库写入任何数据。这是我的内部 NLog 日志:http://pastebin.com/0tLi9zJ1
我该如何解决这个问题?

抱歉,我上次尝试问这个问题,我好像忘了提供一些必要的信息。

【问题讨论】:

    标签: c# database logging .net-3.5 nlog


    【解决方案1】:

    所以,工作代码是:

    <?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">
    
      <variable name="sqlDate" value="${date:format=yyyy-MM-dd HH\:mm\:ss\.fff}"/>
    
      <targets>
        <target name="dataBase"
            xsi:type="Database"
            dbProvider="System.Data.SqlClient"
            connectionString="${gdc:item=myConnectionString}"
            dbDatabase="${gdc:item=myDataBase}">
          <commandText>
            INSERT INTO [TABLE_NAME]([COL1], [COL2] )
            VALUES(@val1, @val2)
          </commandText>
          <parameter name="@val1" layout="${event-context:item=val1}"/>
          <parameter name="@val2" layout="${event-context:item=val2}"/>
        </target>
      </targets>
    
      <rules>
        <logger name="_dataBase" levels="Info" writeTo="dataBase" final="true" />
      </rules>
    </nlog>
    
    public static class Log
    {
        private static Config _config = LoadConfig();
    
        public static void Info(string val1, string val2)
        {
              NLog.Logger logger = NLog.LogManager.GetLogger("_dataBase");
    
              GlobalDiagnosticsContext.Set("myConnectionString", _config.ConnectString);
              GlobalDiagnosticsContext.Set("myDataBase", _config.DBName);
    
              LogEventInfo info = new LogEventInfo(LogLevel.Info, "_dataBase", "Test_message");
              info.Properties["val1"] = val1;
              info.Properties["val2"] = val2;
    
              logger.Log(info);
        }
    }
    

    【讨论】:

    • 是否有一个命名空间包含Config 类?我从哪里获得Config 课程?相同的任何文档..
    • 还有,LogEventInfo方法中第三个参数有什么用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2016-02-14
    相关资源
    最近更新 更多