通过oracle中的存储过程使用log4net

时间:2010-05-24 18:47:35

标签: c# stored-procedures oracle10g log4net

我的目标是通过存储过程使用log4net登录oracle 10g。 我在log4net配置xml文件中进行了配置,使用ado.net appender并使用存储过程登录db。 我想在db中使用错误代码,错误消息等参数记录异常。 请指导我如何使用C#CODE传递此Exception对象以在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 个答案:

答案 0 :(得分:1)

Log4net缓冲SQL命令。您可以像这样设置缓冲区:

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

答案 1 :(得分:0)

答案 2 :(得分:0)

我认为您的配置略有偏差...... 试试这个

                                                                                                                                                                                                                                                                                                                           

请注意,ADO appender缓冲输入(我不知道在何种程度上),但这意味着该条目不会立即出现在数据库中。

正如johnathon所提到的,鉴于您尚未发布完整配置,我们也无法检查任何过滤器,连接字符串或存储过程设置。

您的实际代码看起来很好。 但是我会在

中加入一些文字

logger.Debug( “”);

行,以防appender丢弃没有数据的日志...

希望这有点帮助...