2010-05-24 26 views
3

我的目標是通過存儲過程使用log4net登錄Oracle 10g。 我已經在log4net配置xml文件中進行配置,以使用ado.net appender並使用存儲過程來記錄數據庫。 我想在數據庫中使用錯誤代碼,錯誤消息等參數記錄異常。 請指導我如何使用C#代碼寫入db來傳遞此Exception對象。 我已經在存儲過程的xml中進行了適當的配置。在oracle中通過存儲過程使用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

請更詳細地解釋「不工作」。 – 2010-05-24 19:14:26

+1

您是否從.Net登錄到Oracle數據庫?或者你以某種方式執行Oracle觸發器的.Net代碼或其他東西?你提到的存儲過程很混亂。我甚至沒有看到你的連接字符串設置在哪裏,log4net可以與AdoNetAppender配合使用。 – jonathanpeppers 2010-06-29 21:28:27

回答

0

我覺得你的配置稍微偏離... 試試這個

注意,ADO附加器緩衝輸入(我不知道到什麼程度),這意味着,但該條目不會立即出現在數據庫中。

由於johnathon提到,鑑於您尚未發佈完整配置,我們無法檢查任何過濾器,連接字符串或存儲過程設置。

你的實際代碼看起來不錯。 但是我會在

logger.Debug(「」);

線,以防萬一附加目的地拋出沒有數據日誌......

希望這有助於有點...

1

log4net的緩衝SQL命令。你可以像這樣設置緩衝區:

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="128" /> 
</appender>