2010-05-24 3 views
3

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

Спасибо.

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

 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

Вы заходите из .Net в базу данных Oracle? Или вы каким-то образом выполняете .Net-код из триггера Oracle или что-то еще? Ваше упоминание о хранимой процедуре сбивает с толку. Я даже не вижу, где у вас установлена ​​строка подключения для log4net для работы с AdoNetAppender. – jonathanpeppers

ответ

0

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

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

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

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

logger.Debug ("");

линия, только в том случае, Appender выкидывают журналы, которые не имеют никаких данных ...

Надеется, что это помогает несколько ...

1

Log4Net буферам командам SQL. Вы можете установить такой буфер:

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="128" /> 
</appender> 
Смежные вопросы