【问题标题】:How to overwrite log4net AdoNetAppender's CommandText如何覆盖 log4net AdoNetAppender 的 CommandText
【发布时间】:2019-11-11 02:20:55
【问题描述】:

我正在尝试以编程方式覆盖log4net.Appender.AdoNetAppenderCommandText 属性。当我调试它时,该属性似乎已设置,但插入永远不会终止。

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)";
            }
        }
    }

我的 Appender 配置: (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>

【问题讨论】:

    标签: c# logging log4net adonetappender


    【解决方案1】:

    文档说您可以通过属性更改值。 我假设您可以添加一个构造函数,调用基本构造函数,然后更改命令文本。 或者,它说您可以覆盖 GetLogStatement。

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

    【讨论】:

    • 感谢您的回答,我尝试使用 GetLogStatement 覆盖和构造函数,但最终从配置文件中删除这些空行给了我解决方案:&lt;connectionString value="" /&gt;&lt;commandText value="" /&gt;
    【解决方案2】:

    最终我找到了解决方案:我已经从 AdoNetAppender 配置中完全删除了以下几行:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      相关资源
      最近更新 更多