如何让ELMAH将错误日志记录到MongoDB?(ASP.NET MVC站点)
嘿,已经搞定ELMAH的基础错误记录了对吧?那把日志转到MongoDB其实没那么复杂,我给你一步步捋清楚操作流程:
1. 安装ELMAH的MongoDB适配包
原生ELMAH不支持MongoDB,所以得装专门的适配包。你可以通过NuGet包管理器可视化界面搜索Elmah.MongoDB安装,或者直接在Package Manager Console里跑命令:
Install-Package Elmah.MongoDB
要是用.NET CLI的话,就执行:
dotnet add package Elmah.MongoDB
2. 配置MongoDB连接字符串
打开你的web.config,找到<connectionStrings>节点,添加MongoDB的连接配置:
<connectionStrings> <!-- 保留你原本的其他连接串 --> <add name="ElmahMongoDB" connectionString="mongodb://localhost:27017/ElmahLogs" /> </connectionStrings>
- 这里
mongodb://localhost:27017是你的MongoDB服务地址和默认端口,要是MongoDB在远程服务器,换成对应IP/域名就行。 ElmahLogs是用来存储错误日志的数据库名,你可以改成自己喜欢的名字。- 如果MongoDB需要身份验证,连接串要改成类似这样:
mongodb://your_username:your_password@localhost:27017/ElmahLogs?authSource=admin
3. 让ELMAH使用MongoDB作为日志存储
找到web.config里的<elmah>节点(安装ELMAH时应该已经自动生成了),在里面添加<errorLog>配置,指定用MongoDB提供器:
<elmah> <!-- 保留你原本的ELMAH配置,比如security相关设置 --> <errorLog type="Elmah.MongoErrorLog, Elmah.MongoDB" connectionStringName="ElmahMongoDB" /> </elmah>
要是想自定义存储日志的集合名称,还可以加个collectionName属性,比如:
<errorLog type="Elmah.MongoErrorLog, Elmah.MongoDB" connectionStringName="ElmahMongoDB" collectionName="CustomErrorLogs" />
4. 验证配置是否生效
现在可以搞个测试错误验证一下:比如在某个Controller的Action里故意抛出一个异常,然后访问Elmah.axd确认错误被记录。同时打开MongoDB客户端(比如Compass),看看你指定的数据库里是不是多了一个Errors(或者你自定义的集合名)集合,里面有没有对应的错误文档。
额外提醒
- 要是MongoDB在远程服务器,记得确保ASP.NET应用所在服务器能访问到MongoDB的27017端口,防火墙要开放对应规则。
- 检查
web.config的<system.webServer>/<modules>节点,确认ELMAH的模块已经注册:<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />(一般NuGet安装会自动添加,但保险起见可以核对一下)
内容的提问来源于stack exchange,提问作者Chitra Nandpal
相关产品推荐
相关产品推荐

