我有一个本地MongoDb数据库实例(通过从Windows命令行运行mongod创建),和一个简单的控制台程序,试图使用Serilog和它的MongoDb接收器将字符串记录到MongoDb数据库:
var log = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.ColoredConsole()
.WriteTo.MongoDB("mongodb://localhost/mydb")
.CreateLogger();
log.Fatal("Fatal message");
"Fatal message"消息被正确地写入控制台,但不写入我的MongoDb数据库。
我当前的MongoDb数据库是"mydb"。根据"show collections",我只有collection系统。index和testData,而"db.testData.find()"不产生任何结果。
Serilog网站说使用连接字符串"mongo://mydb/log",但这会抛出一个异常"类型为'System '的未处理异常"。格式化异常'发生在MongoDB.Driver.dll '。我在代码中使用的连接字符串在MongoDb站点上指定,地址为http://docs.mongodb.org/manual/reference/connection-string/
如何使用Serilog登录到MongoDb ?
有可能您只是遇到了默认的(两秒?)缓冲延迟-如果您关闭Windows中的控制台应用程序,它会硬终止程序,因此缓冲区不能总是刷新。在关闭应用程序之前等待几秒钟可以解决这个问题。
否则,在Serilog中处理所有sink调试的方法是设置SelfLog.Out
:
SelfLog.Out = Console.Error;
这将打印由接收器引发的任何异常,允许您快速放大错误
我接受了Nicholas和redwards的回答(感谢你们俩!),做了更多的实验,并捕获了结果:http://jsnlog.com/Documentation/GetStartedLogging/StructuredLogging
有趣的是,我得到完全相同的错误,直到我切换到连接字符串为
mongodb://myMachineName mydb
之前,我有mongo://localhost/mydb.
但是,虽然mongo vs mongodb解决了异常问题,它不是插入记录到mydb!我把它改成
.WriteTo。MongoDB(" MongoDB://localhost/logs", restrictedToMinimumLevel: LogEventLevel.Verbose)
,现在它正在工作!"logs"是用"log"作为保存JSON数据的集合创建的。