捕获log4net异常

时间:2012-01-23 17:21:42

标签: vb.net exception-handling log4net enterprise-library tracelistener

我需要捕获log4net异常(它自己的异常不是由它记录的app异常)。我希望有一种方法可以这样做:

Try
    _logger.Info(response)
Catch ex As Exception
    Excepciones.HandleException(ex, "PolicyCore")
End Try

我已经实现了这个代码并且在编译时没有错误但是我强制log4net出错(指向配置文件中的非现有数据库)并且没有任何东西被抛出。
我已经尝试了听众的方法:

 <appSettings>
        <add key="log4net.Internal.Debug" value="true" />
    </appSettings>
    <system.diagnostics>
       <trace autoflush="true" indentsize="4" >
         <listeners>
           <add name="textWriterTraceListener" 
               type="System.Diagnostics.TextWriterTraceListener"
               initializeData="C:\\temp\\log4net.txt" />
           <remove name="Default" />
         </listeners>
       </trace>
    </system.diagnostics>

并且它正在将错误写入log4net.txt,我的意思是强制的。

这最后一个方法有一些缺点:它不会将每个错误附加到文件中,如果错误是相同的,它不会写它,我无法让侦听器将每个错误写入该文件,只有一个(我不知道如何完全配置跟踪侦听器,它可能就是这样)。因此,它不会将日期和时间附加到对我来说必不可少的每一行。最后我不能给它结构(xml)。

即使听众工作我需要使用try / catch aproach ,因为我正在使用Enterprise库中的ExceptionHandling来记录我的应用中的错误。

任何遇到问题和/或有解决方案的人?

1 个答案:

答案 0 :(得分:2)

Log4net旨在不引发任何异常。这似乎是一个好主意,因为如果您的应用程序因为无法登录而失败,那将会非常糟糕。因此,如果您需要记录某些消息并且需要确保这些消息有效,那么您不应该使用日志框架,而应将其作为“业务逻辑”的一部分来实现。

您提到只会记录一次异常。我认为这不是真的:Log4net通常禁用不起作用的appender,因此只有一个例外。例如,如果发生故障,可以将AdoNetAppender配置为re-connect到数据库,在这种情况下,您将多次看到相同的异常。