捕捉log4net例外
-
12-11-2019 - |
题
我需要捕获log4net例外(它自己的例外情况而不是由它记录的应用程序异常)。我希望有一种方法可以这样做:
Try
_logger.Info(response)
Catch ex As Exception
Excepciones.HandleException(ex, "PolicyCore")
End Try
.
我有这个代码实现了,并且编译中没有错误,但我强制log4net有一个错误(指向配置文件中的非现有数据库),没有任何东西。
我已经尝试过听众Aproach:
<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,我的意思是强制的。
这个最后一个aproach有几个缺点:它不会将每个错误追加到文件中,如果错误是相同的,我无法将侦听器写入该文件的每个错误,只有一个(我不知道如何完全配置跟踪侦听器,可能是这样)。因此,它不会将日期和小时附加到每行,而是对我来说是一种不可知论之。最后,我不能向它提供结构(XML)。
即使侦听器工作,我需要使用try / catch aproach ,因为我正在使用企业库的异常句柄来记录我的应用程序中的错误。
任何面临问题和/或有解决方案的人?
解决方案
log4net旨在丢弃任何异常。这似乎是一个好主意,因为如果你的应用程序失败,它确实是非常糟糕的,因为它无法登录。因此,如果您需要记录某些消息并且需要确保此工作,那么您不应该使用日志框架,而是将其实现为“业务逻辑”的一部分。
您提到异常只记录一次。我认为这不是真的:log4net通常禁用不起作用的附加器,因此只有一个例外。例如,adoneTappender可以配置为重新连接在数据库中,如果发生故障,在这种情况下您会看到多次相同的例外。
不隶属于 StackOverflow