как вставить в базу данных из хранимой процедуры в log4net? - PullRequest
1 голос
/ 11 августа 2010

Мне нужно регистрировать свойства контекста потока следующим образом:

string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "log4netconfig.xml";
FileInfo finfo = new FileInfo(logFilePath);
log4net.Config.XmlConfigurator.ConfigureAndWatch(finfo);
ILog logger = LogManager.GetLogger("Exception.Logging");

log4net.ThreadContext.Properties["MESSAGE"] = exception.Message;
log4net.ThreadContext.Properties["MODULE"] = "module1";
log4net.ThreadContext.Properties["COMPONENT"] = "component1";
logger.Debug("test");

и файл конфигурации:

<configuration>
  <configSections>
    <section  name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>

  <log4net>
    <logger name="Exception.Logging" level="Debug">
      <appender-ref ref="AdoNetAppender"/>
    </logger>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <connectionString value="Data Source=xe;User ID=test;Password=test;" />
      <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <bufferSize value="10000"/>
      <commandText value="Log_Exception_Pkg.Insert_Log" />
      <commandType value="StoredProcedure" />

      <parameter>
        <parameterName value="@p_Error_Message" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{MESSAGE}"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@p_Module" />
        <dbType value="String" />
        <size value="225" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{MODULE}"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@p_Component" />
        <dbType value="String" />
        <size value="225" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{COMPONENT}"/>
        </layout>
      </parameter>
    </appender>
  </log4net>
</configuration>

Но он не вставляет их в базу данных.Как я могу заставить это работать?

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Простой ответ: поскольку это соединение с Oracle, удалите символ @ из имени параметра, и оно будет работать.

Образец:

<parameter>
    <parameterName value="@p_Module" />
    <dbType value="String" />
    <size value="225" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{MODULE}"/>
    </layout>
</parameter>
0 голосов
/ 11 декабря 2013

У меня была похожая проблема, когда таблица log4net была в другой схеме.(это, безусловно, относится и к хранимой процедуре или пакету, если они находятся в другой схеме)

Не забудьте затем ввести имя схемы перед таблицей или хранимой процедурой.

Пример:

    <log4net>    
        <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
        <connectionType value="Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
        <connectionString ..../>
        <commandText value="INSERT INTO schemaName.LOG4NET (LOG_DATE, LOG_LEVEL, LOG_IDENTITY, LOG_MESSAGE, LOG_EXCEPTION) VALUES (:log_date, :log_level, :log_identity, :log_message, :log_exception)" />
....
...