ChangemakerStudios / serilog-sinks-mongodb

A sink for Serilog that writes events to MongoDB
Apache License 2.0
92 stars 53 forks source link

mongo icon Serilog.Sinks.MongoDB

NuGet version Downloads Build status

A Serilog sink that writes events as documents to MongoDB.

Package - Serilog.Sinks.MongoDB Platforms - .NET 4.7.2, .NET 6.0, .NET Standard 2.1

Whats New

New in v7.x

New in v6.x

New in v5.x

Installation

Install the sink via NuGet Package Manager Console:

Install-Package Serilog.Sinks.MongoDB

or via the .NET CLI:

dotnet add package Serilog.Sinks.MongoDB

Usage Examples

In the examples below, the sink is writing to the database logs with structured Bson. The default collection name is log, but a custom collection can be supplied with the optional CollectionName parameter. The database and collection will be created if they do not exist.

Basic:

using Serilog;

// use BSON structured logs
var log = new LoggerConfiguration()
    .WriteTo.MongoDBBson("mongodb://mymongodb/logs")
    .CreateLogger();

log.Information("This is a test log message");

Capped Collection:

// capped collection using BSON structured logs
var log = new LoggerConfiguration()
    .WriteTo.MongoDBBson("mongodb://mymongodb/logs", cfg =>
    {
        // optional configuration options:
        cfg.SetCollectionName("log");
        cfg.SetBatchPeriod(TimeSpan.FromSeconds(1));

        // create capped collection that is max 100mb
        cfg.SetCreateCappedCollection(100);
    })
    .CreateLogger();

Custom Mongodb Settings:

// create sink instance with custom mongodb settings.
var log = new LoggerConfiguration()
    .WriteTo.MongoDBBson(cfg =>
    {
        // custom MongoDb configuration
        var mongoDbSettings = new MongoClientSettings
        {
            UseTls = true,          
            AllowInsecureTls = true,
            Credential = MongoCredential.CreateCredential("databaseName", "username", "password"),
            Server = new MongoServerAddress("127.0.0.1")
        };

        var mongoDbInstance = new MongoClient(mongoDbSettings).GetDatabase("serilog");

        // sink will use the IMongoDatabase instance provided
        cfg.SetMongoDatabase(mongoDbInstance);
        cfg.SetRollingInternal(RollingInterval.Month);
    })
    .CreateLogger();

JSON (Microsoft.Extensions.Configuration)

Keys and values are not case-sensitive. This is an example of configuring the MongoDB sink arguments from Appsettings.json:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Error",
        "System": "Warning"
      }
    },
    "WriteTo": [
      { 
        "Name": "MongoDBBson", 
        "Args": { 
            "databaseUrl": "mongodb://username:password@ip:port/dbName?authSource=admin",
            "collectionName": "logs",
            "cappedMaxSizeMb": "1024",
            "cappedMaxDocuments": "50000",
            "rollingInterval": "Month"
        }
      } 
    ]
  }
}

Icon

MongoDB icon by Icons8