我需要捕获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可以配置为重新连接在数据库中,如果发生故障,在这种情况下您会看到多次相同的例外。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top