首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RavenDB中保存结构化日志

在RavenDB中保存结构化日志
EN

Stack Overflow用户
提问于 2019-08-30 10:09:28
回答 2查看 201关注 0票数 2

我正在编写.NET核心应用程序,并希望使用.NET Core扩展中可用的结构化日志以更结构化的方式编写日志。我想把我的日志保存在RavenDB中,我想知道是否有这样的用例的最佳实践?我对文档DB很陌生,我无法像在SQL关系数据库中那样预测将来的事情。我的主要考虑是:

  1. 我是否应该将每个日志保存在单独的文档中,或者更好的方法是为每个结构化日志模板创建一个文档,并在其中保存具有相同模板的日志。第二个想法很诱人,但我并不担心它会在一段时间后爆炸?
  2. 最好是以一种格式保存所有日志(消息、异常等),并将结构化数据保存在附在其上的键值列表中,还是为每种日志类型创建单独的文档结构会更好?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-25 19:51:05

我认为每个日志条目都应该进入一个单独的文档,原因如下:

  • 日志条目应该过期,否则数据库就会超时。如果同一文档中有多个日志项,则无法过期日志,则需要在同一文档中过期一组日志。
  • RavenDB不喜欢庞大的文档,因为它们会导致性能问题。将日志按模板分组到相同的文档中将产生巨大的文档。
  • 将文档分组将使获取相关日志集更加困难。

我认为结构化数据应该采用经典的JSON属性形式。例如:

代码语言:javascript
复制
{
   "State": {
        "Service": "International Weather Forecast Service",
        "{OriginalFormat}": "Weather forecast called using {Service}"
    }

}

GitHub上有一个遵循分组方法RavenDB.StructuredLog的项目。但我认为这不是正确的,所以我创建了我的:Logging.Raven

票数 1
EN

Stack Overflow用户

发布于 2019-09-03 14:53:45

您可以做的是,使用类似于此的模型:

代码语言:javascript
复制
public class LogMessage<T>
{
    public string Message;
    public string Exception;

    public T Value;
}

将每个日志消息保存为集合中的单独文档。如果将来需要进行更改,您可以更改此模型,并使用修补程序功能来修补旧文档。

此外,我认为文档Expiration功能将有助于删除旧日志文档。https://ravendb.net/docs/article-page/4.2/Csharp/server/extensions/expiration

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57724772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档