Serilog:不能通过MongoDb sink登录到MongoDb



我有一个本地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数据的集合创建的。

最新更新