我们将 log4net 用于我们当前的应用程序日志记录,但我不喜欢我们目前围绕它构建的日志记录框架的方式。例如,它目前有一个单点故障,如果由于某种原因它无法连接到日志服务器,那么您将没有日志记录。我想将它构建为一个灵活但简单的框架,允许我指定一个或多个“备份”附加程序以在主附加程序失败时使用(例如,如果日志服务器关闭,则写入文件反而)。
你们有没有人偶然发现过这样的东西,你喜欢并且觉得写得很好?我不介意自己动手,但我非常喜欢不要重新发明轮子
谢谢
我没有遇到任何已经建成的东西。我建议您制作自己的 appender,它使用现有的 appender,但添加属性以在发生故障时做什么。您可以使用AppenderSkeleton作为新附加程序的基类,然后从那里调用您要使用的附加程序的附加函数。
因此,当 log4 使用您的记录器时,它将是这样的(注意:这不完整,但应该给您一个起点):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net.Appender;
using log4net.Core;
namespace logger {
class FailoverAppender : AppenderSkeleton {
protected override void Append(LoggingEvent loggingEvent) {
// Send the log message to the web service.
try {
FirstAppender.Append(loggingEvent);
}
catch (Exception e) {
try{
SecondAppender.Append(loggingEvent);
}
catch (Exception e2){
ErrorHandler.Error("An error occurred while connecting to the logging service.", e);
}
}
}
}
}
我希望这可以帮助您入门,也许如果您完成了它,您也可以在这里发布解决方案。
我实际上决定改用 NLog,因为 log4net 设置起来很痛苦。NLog 更易于使用,更易于设置,并且代码库保持最新(log4net 几乎被废弃)