Как переписать log4net Командный текст AdoNetAppender - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь программно переписать свойство CommandText log4net.Appender.AdoNetAppender. Когда я отлаживаю его, свойство кажется установленным, но вставка никогда не завершается.

Само значение CommandText, безусловно, является правильным. Если я вставлю его прямо в конфигурационный файл Appender, он вставит запись. Я использую несколько других типов приложений, которые также выполняют свою работу.

Как мне перезаписать свойство CommandText во время выполнения?

public class DdsAdoNetAppender : AdoNetAppender
    {
        public new string ConnectionString
        {
            get
            {
                return base.ConnectionString;
            }
            set
            {
               CommandText = "INSERT INTO ApplicationLogs ([LogDateTime],[LogType],[MachineName],[UserName],[LogMessage],[LogException]) " +
                    "VALUES (@log_date_time, @log_type, @machine_name, @user_name, @log_message, @log_exception)";
            }
        }
    }

Конфигурация моего приложения: (Значение commandText в основном пустое.)

<appender name="AdoNetAppender" type="DigitalDrawingStore.Backend.Logging.AdoNetAppenders.DdsAdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <ReconnectOnError value="true" />
      <connectionString value="data source = (localdb)\\MSSQLLocalDB; initial catalog = TestAdoNetLogDb; integrated security = true" />
      <commandText value="" />
      <commandType value="Text" />

      <parameter>
        <parameterName value="@log_date_time" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
      </parameter>
      <parameter>
        <parameterName value="@log_type" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout" value="%property{LogType}" />
      </parameter>
      <parameter>
        <parameterName value="@machine_name" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout" value="%property{MachineName}" />
      </parameter>
      <parameter>
        <parameterName value="@user_name" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout" value="%property{UserName}" />
      </parameter>
      <parameter>
        <parameterName value="@log_message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout" value="%property{LogMessage}" />
      </parameter>
       <parameter>
        <parameterName value="@log_exception" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout" value="%property{LogException}" />
      </parameter>
    </appender>

Ответы [ 2 ]

1 голос
/ 29 июня 2019

В документации сказано, что вы можете изменить значение через свойство. Я предполагаю, что вы можете добавить конструктор, вызвать базовый, а затем изменить командный текст. Кроме того, он говорит, что вы можете переопределить GetLogStatement.

https://logging.apache.org/log4net/release/sdk/html/P_log4net_Appender_AdoNetAppender_CommandText.htm

0 голосов
/ 29 июня 2019

В конце концов я нашел решение: я слишком полностью удалил следующие строки из конфигурации AdoNetAppender:

<connectionString value="" />
<commandText value="" />
...