5

我有一个本地 MongoDb 数据库实例(通过从 Windows 命令行运行 mongod 创建)和一个简单的控制台程序,它尝试使用 Serilog 及其 MongoDb 接收器将字符串记录到 MongoDb 数据库:

        var log = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.ColoredConsole()
            .WriteTo.MongoDB("mongodb://localhost/mydb")
            .CreateLogger();

        log.Fatal("Fatal message");

“致命消息”消息已正确写入控制台,但未正确写入我的 MongoDb 数据库。

我当前的 MongoDb 数据库是“mydb”。根据“显示集合”,我只有集合 system.indexes 和 testData,而“db.testData.find()”什么也没产生。

Serilog 站点说要使用连接字符串“mongo://mydb/log”,但这会引发异常“MongoDB.Driver.dll 中发生了类型为 'System.FormatException' 的未处理异常”。我在代码中使用的连接字符串在 MongoDb 站点上指定,位于http://docs.mongodb.org/manual/reference/connection-string/

如何使用 Serilog 登录到 MongoDb?

4

3 回答 3

6

您可能只是遇到了默认的(两秒?)缓冲延迟 - 如果您在 Windows 中关闭控制台应用程序,它会硬终止程序,因此无法始终刷新缓冲区。如果是这样,在关闭应用程序之前等待几秒钟将解决此问题。

否则,解决 Serilog 中所有接收器调试的方法是设置SelfLog.Out

SelfLog.Out = Console.Error;

这将打印接收器引发的任何异常,允许您快速放大错误(如果它在哪里)。

于 2014-07-13T00:55:14.247 回答
2

我接受了 Nicholas 和 redwards 的答案(感谢你们俩!),做了更多的实验,并在以下位置捕获了结果:http: //jsnlog.com/Documentation/GetStartedLogging/StructuredLogging

于 2014-07-22T10:28:54.240 回答
1

有趣的是,在将连接字符串切换为

mongodb://myMachineName/mydb

之前,我有 mongo://localhost/mydb。

但是,虽然 mongo vs mongodb 解决了异常问题,但它并没有将记录插入 mydb!所以我把它改成了

.WriteTo.MongoDB("mongodb://localhost/logs", restrictedToMinimumLevel: LogEventLevel.Verbose)

现在它正在工作!“logs”是用“log”作为保存 JSON 数据的集合创建的。

于 2014-07-16T20:59:03.127 回答