Log4Net停止记录

时间:2012-06-20 14:10:25

标签: .net exception-handling c#-3.0 log4net

我有一个实用程序,可以全天运行数据转换和同步。

如果应用程序暂时停止运行,这不是什么大问题,但它必须记录它的操作。我宁愿应用程序失败而不是没有登录。我发现了一些涉及该主题的帖子,但我无法使任何解决方案起作用。

我需要设置一种方法来阻止应用程序运行(取决于应用程序设置),并在Log4Net停止记录时发出警告电子邮件。

我有这个为我的appender:

<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
  <errorHandler type="SomeApp.PresentationLayer.Log4NetErrorHandler" />
  <file type="log4net.Util.PatternString" value="H:\SomeApp-%property{RegNo}-log.txt" />
  <appendToFile value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <header value="[START]" />
    <footer value="[END]" />
    <conversionPattern value="%date %-5level - %message%newline" />
  </layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
  <level value="DEBUG" />
  <appender-ref ref="LogFileAppender" />
  <!-- <appender-ref ref="A" /> -->
</root>

这是我的错误处理程序:

namespace SomeApp.PresentationLayer
{
class Log4NetErrorHandler : IErrorHandler
{

    public bool HandleError(Exception ex)
    {
        //Trace.TraceError(ex.ToString());
        ExceptionUtil.GetAndLogMessage(ex, "Log4Net Error in SomeApp", false, true);

        return false;
    }

    public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
    {
        // Shield the unknown exception
        FaultException faultException = new FaultException(
            "Server error encountered. All details have been logged.");
        MessageFault messageFault = faultException.CreateMessageFault();

        fault = Message.CreateMessage(version, messageFault, faultException.Action);
    }
}
}

无论我尝试什么,异常处理程序都不会触发。我将日志文件设置为映射驱动器。在它的日志记录中,我断开驱动器,它永远不会抛出我的异常处理程序的异常。有人看到我错过的东西吗?

我正在使用c#.net 3.5 log4net 1.2.10

感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:0)

我实际上没有使用过log4net errorHandlers,可能完全不在这里,但我的直觉告诉我,errorHandler是为了配置log4net异常的处理,而不是应用程序异常,并且关于这个主题的信息很少关于errorHandler参数的虚假博客帖子可能会让你感到困惑。从SDK文档:

Implements log4net's default error handling policy which consists of emitting a 
message for the first error in an appender and ignoring all subsequent errors. 

我承认,不是很有帮助,但它似乎没有你想的那么做。 您必须在应用程序中正确处理应用程序异常,并自行记录消息以在日志中查看它。

还有another question here可能提供更多线索。

答案 1 :(得分:0)