【问题标题】:How do I specify the collection for Serilog.Sinks.MongDB sink如何指定 Serilog.Sinks.MongDB 接收器的集合
【发布时间】:2015-09-20 16:43:35
【问题描述】:

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

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

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

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

后来:我在我的数据库中添加了一个名为“log”的集合,而 Serilog 正在写入该集合。因此,“日志”似乎已写入驱动程序。我想要这个特定数据库的两个不同的日志。所以我的问题仍然存在。有没有办法做到这一点?

【问题讨论】:

    标签: mongodb serilog


    【解决方案1】:

    下载源代码,在 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多