首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET日志框架设计

.NET日志框架设计
EN

Stack Overflow用户
提问于 2012-04-06 03:16:33
回答 3查看 467关注 0票数 2

我们使用log4net来记录当前的应用程序日志,但我不喜欢当前围绕它构建日志记录框架的方式。例如,它目前有一个单点故障,如果由于任何原因不能连接到日志服务器,那么您将无法获得日志。我想将它构建为一个灵活但简单的框架,允许我指定一个或多个“备份”附加器,以便在主服务器出现故障时使用(例如,如果日志服务器关闭,则改为写入文件)。

你们中有没有人偶然发现了像这样的东西,你喜欢并且觉得写得很好?我不介意滚动我自己的,但我是一个努力不重复轮子的铁杆粉丝

谢谢

EN

回答 3

Stack Overflow用户

发布于 2014-03-22 18:37:14

SeqSerilog的组合支持这一点:记录器将所有事件缓冲到一组滚动文件中,然后异步读取这些文件,并使用HTTP/S将它们发送到服务器。

配置如下所示:

代码语言:javascript
复制
var log = new LoggerConfiguration()
    .WriteTo.Seq("http://my-seq-server", bufferBaseFilename: "C:\\Logs\\myapp")
    .CreateLogger();

我在这两个项目上都工作--渴望得到一些关于这种方法如何符合要求的反馈(如果你足够幸运能够切换到Serilog;)

票数 5
EN

Stack Overflow用户

发布于 2012-04-06 04:12:17

我没有遇到任何已经构建好的东西。我建议您制作自己的附加器,它使用现有的附加器,但添加了当失败发生时如何处理的属性。您可以使用AppenderSkeleton作为新附加器的基类,然后从那里调用要使用的附加器的append函数。

因此,当log4使用您的记录器时,它将如下所示(注意:这并不完整,但应该为您提供一个起点):

代码语言:javascript
复制
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);
                }
            }
        }
    }
}

我希望这能帮助你开始,也许如果你完成了它,你也可以在这里发布解决方案。

票数 2
EN

Stack Overflow用户

发布于 2012-04-14 00:01:25

实际上,我决定使用NLog,因为log4net的安装太麻烦了。NLog更容易使用,更容易设置,并且代码库保持最新(log4net几乎被抛弃)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10034637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档