我需要捕获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来记录我的应用中的错误。
任何遇到问题和/或有解决方案的人?
答案 0 :(得分:2)
Log4net旨在不引发任何异常。这似乎是一个好主意,因为如果您的应用程序因为无法登录而失败,那将会非常糟糕。因此,如果您需要记录某些消息并且需要确保这些消息有效,那么您不应该使用日志框架,而应将其作为“业务逻辑”的一部分来实现。
您提到只会记录一次异常。我认为这不是真的:Log4net通常禁用不起作用的appender,因此只有一个例外。例如,如果发生故障,可以将AdoNetAppender配置为re-connect到数据库,在这种情况下,您将多次看到相同的异常。