我正在为我的ASP.NET MVC应用程序寻找一个集中的日志解决方案(对于 Windows 服务器)。
我的应用程序是可扩展的,我希望我的日志也可以扩展(因此日志服务器不会是单点故障/瓶颈)。
之前我使用过LogFaces,但此解决方案不具备可扩展性。它使用单个日志服务器。
我使用log4net作为记录器,并寻找可以编写(或使用)appender来推送日志的解决方案。
有什么建议吗?
谢谢! Roei
答案 0 :(得分:1)
查看ELMAH,可以运行每个应用程序,或者一个实例来覆盖服务器上的所有应用程序
答案 1 :(得分:1)
Spread符合要求。它不是日志记录服务,但许多项目将其用于分布式日志记录(例如Apache Web服务器的mod_log_spread模块)。它有一个C#available here的客户端。
它的价值在于一个简单的原则:生成日志的应用程序不应受到日志记录的约束或中断。日志记录通常是应用程序的第二个问题,并且让您的日志文件目标磁盘填满(或者您的日志服务崩溃)是您的应用程序失败的一个非常糟糕的原因。
要达到这种级别的分离,您必须以这样一种方式构建应用程序,即它可以完全异步并且独立于日志记录“服务”进行日志记录。 Spread使用一种易于理解和已建立的技术实现这一目标:UDP /多播。
使用Spread进行日志记录意味着您的应用程序将通过UDP登录“即发即弃”模式。如果没有设置Spread守护程序来使用这些多播消息,则日志消息将永远消失。但是,日志生成器和消费者之间的分离意味着您的应用程序永远不必担心日志填满磁盘,也不必担心花时间查找并使用TCP连接到中央日志服务器。
但是,传播不是针对每个应用程序。您的环境可能不支持多播(因此EC2已启用,对于初学者而言),或者您的网络管理员可能会阻止生产环境中的多播数据包。答案 2 :(得分:0)
我有一个appender,它通过wcf的net.tcp绑定将消息发送到远程机器上的msmq消息队列。另一端有一个服务将这些消息记录到数据库中。
如果你只是谈论asp.net,那么elmah可能相当不错 - 我的理解是它只插入了它并且没有解决更多一般的东西,如Windows服务等。不确定wcf应用程序,或者你甚至不关心你的asp.net应用程序之外的任何东西。我猜你的系统可能还有更多,你想要标准化。另外,因为您关注规模,您可能会担心必须直接从asp.net访问数据库进行日志记录。我的理解是,这就是elmah所做的。没有调查过,但它可能会扩展到我建议的msmq。如果您真的关心规模,我认为您希望以某种方式合并消息队列,而wcf是这样做的好选择。