我应该如何存储日志记录应用程序的文档?

时间:2013-07-11 14:55:40

标签: ravendb

我正在编写一个日志记录应用程序,我正在使用RavenDB作为数据存储。我们有很多基于文本的日志记录,并希望能够利用RavenDB的索引功能来搜索它。

我开始编写我的文档实现:

public class LogEntry 
{
  public DateTime Date {get;set;}
  public string Message {get;set;}
}

public class Information : LogEntry {}

public class Error : LogEntry {}

我这样做了,因此UI会针对不同的日志级别显示不同的集合,但是,在考虑了它之后,我只会使用UI来查询日志。

由于RavenDB在幕后存储所有文档,因此最好只有一个文档LogEntry公开严重性级别属性,然后创建多个索引按严重性级别对文档集合进行分组?

public class LogEntry
{
  public DateTime Date {get;set;}
  public string Message {get;set;}
  public string Severity {get;set;}
}

1 个答案:

答案 0 :(得分:0)

我会创建一个单独的类,但对于Severityenum类型怎么样? RavenDB将枚举存储为字符串,因此它不会对性能产生任何影响。但是,您将获得避免拼写错误并在.Net代码中使用Intellisense的好处。

你应该只有一个索引,而不是倍数。您的地图应包含您要排序或过滤的所有字段,因此您可能会映射所有三个字段DateMessageSeverity

您可能还需要考虑在索引中将Message字段标记为“已分析”。这将允许对日志消息进行全文搜索。

public enum Severity
{
    Debug,
    Info,
    Warning,
    Error
}

public class LogEntry
{
    public DateTime Date { get; set; }
    public string Message { get; set; }
    public Severity Severity { get; set; }
}

public class LogEntriesIndex : AbstractIndexCreationTask<LogEntry>
{
    public LogEntriesIndex()
    {
        Map = entries => from entry in entries
                         select new
                         {
                             entry.Date,
                             entry.Message,
                             entry.Severity
                         }

        Index(x => x.Message, FieldIndexing.Analyzed);
    }
}