如何为Serilog.Sinks.MongDB接收器指定集合

时间:2015-07-03 00:24:24

标签: mongodb serilog

github上的文档使用以下连接字符串:

.WriteTo.MongoDB("mongo://mymongodb/log")

它表示要使此示例正常工作,您需要将一个名为log的集合添加到您的服务器。但是,此连接字符串将连接到服务器上的日志数据库,而不指定任何集合。我无法找到有关在连接字符串中指定集合的​​任何信息(这是有意义的),那么如何告诉MongoDB接收哪个集合要写入?

我在应用程序中添加了SelfLog.Out = Console.Out,但是我没有在“输出”窗口中看到任何可以帮助我的内容。

后来:我添加了一个名为" log"到我的数据库,Serilog正在写入该集合。所以它似乎" log"被烧成了司机。我想要这个特定数据库的两个不同的日志。所以我的问题依旧。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

下载源代码并将集合参数添加到MongoDB LoggerConfiguration类构造函数的签名中。更改后的代码标有**。

public static LoggerConfiguration MongoDB(
    this LoggerSinkConfiguration loggerConfiguration,
    string databaseUrl,
    **string collectionName = null,**
    LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
    int batchPostingLimit = MongoDBSink.DefaultBatchPostingLimit,
    TimeSpan? period = null,
    IFormatProvider formatProvider = null)
{
    if (loggerConfiguration == null) throw new ArgumentNullException("loggerConfiguration");
    if (databaseUrl == null) throw new ArgumentNullException("databaseUrl");

    var defaultedPeriod = period ?? MongoDBSink.DefaultPeriod;
    return loggerConfiguration.Sink(
        new MongoDBSink(
            databaseUrl,
            batchPostingLimit,
            defaultedPeriod,
            formatProvider,
            **collectionName ??** MongoDBSink.DefaultCollectionName,
            new CreateCollectionOptions()),
        restrictedToMinimumLevel);
}