我的目标是通过存储过程使用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>
答案 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丢弃没有数据的日志...
希望这有点帮助...