2010-05-24 67 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>