используя log4net через хранимые процедуры в oracle - PullRequest
3 голосов
/ 24 мая 2010

Моя цель - войти в Oracle 10g с помощью log4net через хранимую процедуру. Я сделал конфигурацию в файле xml конфигурации log4net, чтобы использовать ado.net appender и использовать хранимую процедуру для входа в базу данных. Я хочу регистрировать исключения в БД с такими параметрами, как код ошибки, сообщение об ошибке и т. Д. Пожалуйста, объясните мне, как передать этот объект Exception, используя C # CODE для записи в db. Я сделал правильные конфигурации в xml для хранимых процедур.

Спасибо.

Код выглядит следующим образом:

      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["INNER_EXCEPTION"] = exception.InnerException.ToString();

                log4net.ThreadContext.Properties["INNER_EXCEPTION"] = string.Empty;
                log4net.ThreadContext.Properties["STACK_TRACE"] = exception.StackTrace.ToString();

                log4net.ThreadContext.Properties["STACK_TRACE"] = string.Empty;

                log4net.ThreadContext.Properties["MESSAGE"] = ((H2hException)exception).Message;
                log4net.ThreadContext.Properties["CODE"] = "err-1010";
                log4net.ThreadContext.Properties["MODULE"] = "NED.Development";
                log4net.ThreadContext.Properties["COMPONENT"] = "Component";
                log4net.ThreadContext.Properties["ADDITIONAL_MESSAGE"] = "msg";
                logger.Debug("");

  <parameter>
    <parameterName value="@p_Error_Code" />
    <dbType value="VARCHAR2" />
    <size value="16" />
    <!--<layout type="log4net.Layout.PatternLayout" value="%level" />-->
    <conversionPattern value="%property{log4net:CODE}"/>
  </parameter>
  <parameter>
    <parameterName value="@p_Error_Message" />
    <dbType value="VARCHAR2" />
    <size value="255" />
    <!--<layout type="log4net.Layout.PatternLayout" value="%logger" />-->
    <conversionPattern value="%property{log4net:MESSAGE}"/>
  </parameter>

  <parameter>
    <parameterName value="@p_Inner_Exception" />
    <dbType value="VARCHAR2" />
    <size value="4000" />
    <!--<layout type="log4net.Layout.PatternLayout" value="%thread" />-->
    <conversionPattern value="%property{log4net:INNER_EXCEPTION}"/>
  </parameter>
  <parameter>
    <parameterName value="@p_Module" />
    <dbType value="VARCHAR2" />
    <size value="225" />
    <!--<layout type="log4net.Layout.PatternLayout" value="%message" />-->
    <conversionPattern value="%property{log4net:MODULE}"/>
  </parameter>
  <parameter>
    <parameterName value="@p_Component" />
    <dbType value="VARCHAR2" />
    <size value="225" />
    <!--<layout type="log4net.Layout.ExceptionLayout" />-->
    <conversionPattern value="%property{log4net:COMPONENT}"/>
  </parameter>
  <parameter>
    <parameterName value="@p_Stack_Trace " />
    <dbType value="VARCHAR2" />
    <size value="4000" />
    <!--<layout type="log4net.Layout.PatternLayout"/>-->
    <conversionPattern value="%property{log4net:STACK_TRACE}"/>
  </parameter>
  <parameter>
    <parameterName value=" @p_Additional_Message" />
    <dbType value="VARCHAR2" />
    <size value="4000" />
    <!--<layout type="log4net.Layout.ExceptionLayout" />-->
    <conversionPattern value="%property{log4net:ADDITIONAL_MESSAGE}"/>
  </parameter>
</appender>

Ответы [ 3 ]

1 голос
/ 24 августа 2010

Log4net буферизует команды SQL. Вы можете установить буфер следующим образом:

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="128" />
</appender>
0 голосов
/ 24 августа 2010

Я думаю, что ваш конфиг немного отключен ... Попробуйте это

Обратите внимание, что приложение ADO буферизует входные данные (я не знаю, в какой степени), но это означает, что запись не будетнемедленно появляются в базе данных.

Как упоминает Джонатон, учитывая, что вы не опубликовали полную конфигурацию, мы не можем проверить ни фильтры, ни строки подключения, ни настройки сохраненного процесса.

Ваш фактический код выглядитхорошо.Однако я бы поместил некоторый текст в строку

logger.Debug ("");

, на случай, если аппендер выбрасывает журналы без данных ...

Надеюсь, это поможет несколько ...

0 голосов
/ 03 августа 2010

Вы уже смотрели на это http://logging.apache.org/log4net/release/config-examples.html

...