在 RavenDB 中保存结构化日志
Saving structured logs in RavenDB
我正在编写 .NET Core 应用程序,并希望使用 .NET Core 日志记录扩展中提供的结构化日志记录以更结构化的方式编写日志。我想将我的日志保存在 RavenDB 中,我想知道对于这样的用例是否有任何最佳实践?我是文档数据库的新手,我无法像在 SQL 关系数据库中那样预测未来的事情。我的主要考虑是:
- 我应该将每个日志保存在单独的文档中,还是更好的办法是为每个结构化日志模板创建一个文档,并在其中保存具有相同模板的日志。第二个想法很诱人,但我有点担心它会在一段时间后爆炸?
- 最好以一种格式(消息、异常等)保存所有日志,并将结构化数据保存在附加的键值列表中,或者为每种日志类型创建单独的文档结构会更好?
你可以做的是,使用类似这样的模型:
public class LogMessage<T>
{
public string Message;
public string Exception;
public T Value;
}
将每条日志消息保存为集合中的单独文档。
如果您将来需要更改内容,您可以更改此模型并使用补丁功能为您的旧文档打补丁。
我还认为 文档过期 功能对于删除旧日志文档很有用。
https://ravendb.net/docs/article-page/4.2/Csharp/server/extensions/expiration
我认为每个日志条目都应该放在一个单独的文档中,原因如下:
- 日志条目应该过期,否则数据库会超时。如果同一个文档中有多个日志条目,则不能使一个日志过期,您需要使同一个文档中的一组日志过期。
- RavenDB 不喜欢大文档,因为它们会导致性能问题。通过模板将日志分组到相同的文档中会产生巨大的文档。
- 对文档进行分组会使获取相关日志集变得更加困难。
我认为结构化数据应该采用经典的 JSON 属性形式。例如:
{
"State": {
"Service": "International Weather Forecast Service",
"{OriginalFormat}": "Weather forecast called using {Service}"
}
}
GitHub 上有一个项目遵循分组方法 RavenDB.StructuredLog. But I think it is not the right one, so I created mine: Logging.Raven
我正在编写 .NET Core 应用程序,并希望使用 .NET Core 日志记录扩展中提供的结构化日志记录以更结构化的方式编写日志。我想将我的日志保存在 RavenDB 中,我想知道对于这样的用例是否有任何最佳实践?我是文档数据库的新手,我无法像在 SQL 关系数据库中那样预测未来的事情。我的主要考虑是:
- 我应该将每个日志保存在单独的文档中,还是更好的办法是为每个结构化日志模板创建一个文档,并在其中保存具有相同模板的日志。第二个想法很诱人,但我有点担心它会在一段时间后爆炸?
- 最好以一种格式(消息、异常等)保存所有日志,并将结构化数据保存在附加的键值列表中,或者为每种日志类型创建单独的文档结构会更好?
你可以做的是,使用类似这样的模型:
public class LogMessage<T>
{
public string Message;
public string Exception;
public T Value;
}
将每条日志消息保存为集合中的单独文档。 如果您将来需要更改内容,您可以更改此模型并使用补丁功能为您的旧文档打补丁。
我还认为 文档过期 功能对于删除旧日志文档很有用。 https://ravendb.net/docs/article-page/4.2/Csharp/server/extensions/expiration
我认为每个日志条目都应该放在一个单独的文档中,原因如下:
- 日志条目应该过期,否则数据库会超时。如果同一个文档中有多个日志条目,则不能使一个日志过期,您需要使同一个文档中的一组日志过期。
- RavenDB 不喜欢大文档,因为它们会导致性能问题。通过模板将日志分组到相同的文档中会产生巨大的文档。
- 对文档进行分组会使获取相关日志集变得更加困难。
我认为结构化数据应该采用经典的 JSON 属性形式。例如:
{
"State": {
"Service": "International Weather Forecast Service",
"{OriginalFormat}": "Weather forecast called using {Service}"
}
}
GitHub 上有一个项目遵循分组方法 RavenDB.StructuredLog. But I think it is not the right one, so I created mine: Logging.Raven