为log4net设置动态commandText

时间:2015-05-18 08:08:08

标签: c# sql log4net

嘿我在我的项目中使用Log4Net。下面的代码仅来自我为测试目的而制作的测试项目。我有commandText标记的多个值,所以我想动态地创建它。到目前为止,我尝试使用CustomColumn,但这不起作用。我认为因为它没有插入SQL代码。

    <log4net>
  <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="1" />
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="xx" Catalog="xx"; Integrated Security=True;"/>
    <commandText value="INSERT INTO dbo.Log ([Date],[Thread],[Level],[Logger],[Message],[Exception], [AuftragsID]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @CustomColumn )" />
    ...other parameters
    <parameter>
      <parameterName value="@CustomColumn"/>
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{CustomColumn}" />
      </layout>
    </parameter>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="AdoNetAppender"/>
  </root>
</log4net>

这是我的代码

    private static readonly log4net.ILog log = log4net.LogManager.GetLogger (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    private void simpleButton1_Click(object sender, EventArgs e)
    {
        log4net.Config.XmlConfigurator.Configure(new FileInfo(@"D:\Daten\x-NeissF\Documents\Visual Studio 2013\Projects\AUSGABE\AUSGABE\Logging.config"));
        log.Info("Info logging");
        log.Debug("Debug");
        log.Error("ERROR");
        log.Fatal("FATAL");
        log.Warn("Warn");
        log4net.LogicalThreadContext.Properties["CustomColumn"] = "SELECT ID_DBO_AUFTRAG FROM dbo.Auftrag WHERE CADSystem='Promis'";

    }

我需要一个插入不同commandText值的函数。像Thread这样的东西。但是使用包含。

的字符串
    <commandText value="INSERT INTO dbo.Log ([Date],[Thread],[Level],[Logger],[Message],[Exception], [AuftragsID]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, SELECT ID_DBO_AUFTRAG FROM dbo.Auftrag WHERE CADSystem='Promis'

1 个答案:

答案 0 :(得分:1)

3小时后,我找到了一个适用于我的解决方案。

string text = File.ReadAllText(@"D:\Data\.logging.config", Encoding.Default);
text = text.Replace("OriginalString", "NewString");
File.WriteAllText((@"D:\Data\logging.config"), text,Encoding.Default);

在这种情况下,我将insert中的值更改为sql语句。

<commandText value="INSERT INTO dbo.Log ([Date],[Thread],[Level],[Logger],[Message],[Exception], [AuftragsID]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, SELECT data FROM dbo.table WHERE value='OriginalString' )" />