Serilog
Serilog是.NET开源结构化日志类库
开源地址: 官网:Serilog能做什么:
- 记录代码中的BUG和错误
- 更快的找到生产环境中的问题
- 深入的了解系统运行表现
想对Serilog多点了解,请查阅,翻译的很棒。
重现Error出现的场景
在自己的项目中使用Serilog并使用MongoDB记录日志,需要nuget引用 Serilog
和 Serilog.Sinks.MongoDB
。
Serilog 2.7.1
和 Serilog.Sinks.MongoDB 3.1.0
Serilog.Sinks.MongoDB 3.1.0
依赖的是的MongoDB组件库是 MongoDB.Driver 2.3.0
、MongoDB.Driver.Core 2.3.0
、MongoDB.Bson 2.3.0
,所以当nuget引用Serilog.Sinks.MongoDB 3.1.0 自然会引用 MongoDB.Driver 2.3.0
、MongoDB.Driver.Core 2.3.0
、MongoDB.Bson 2.3.0
。 在记录MongoDB日志时报错,内容如下 The GuidRepresentation for the reader is CSharpLegacy, which requires the binary sub type to be UuidLegacy, not UuidStandard
解决方案
程序员google大法,找到同样的错误。点击查看:
文中给了三种解决方案:
1、修改全局配置BsonDefaults.GuidRepresentation
BsonDefaults.GuidRepresentation = GuidRepresentation.Standard;
2、当你创建collection时指定配置
MongoDatabase db = ???;string collectionName = ???;var collectionSettings = new MongoCollectionSettings { GuidRepresentation = GuidRepresentation.Standard};var collection = db.GetCollection(collectionName, collectionSettings);
3、更新驱动
原文如下Solution 3.update to .NET Driver Version 2.5.x
.NET Driver Version 2.5.0 Release Notes say below: The main new feature of 2.5.0 is support for the new features of the 3.6 version of the server: ...Improved support for reading and writing UUIDs in BsonBinary subtype 4 format
解决方案1和2都有点瞎啊,推测要改Serilog.Sinks.MongoDB的源码。自然先按照最简单的开始尝试,更新MongoDB驱动。
我的尝试解决方案:MongoDB.Driver 2.3.0
、MongoDB.Driver.Core 2.3.0
、MongoDB.Bson 2.3.0
统统更新至2.7.0版本(注:当前最新的稳定版本)。然后,嘣!问题解决!