Skip to content

Latest commit

 

History

History
258 lines (233 loc) · 10 KB

File metadata and controls

258 lines (233 loc) · 10 KB

TacitusLogger.Destinations.MongoDb

Extension destination for TacitusLogger that sends logs to MongoDb database.

Dependencies:

  • .Net Standard >= 1.5
  • TacitusLogger >= 0.1.0
  • MongoDB.Driver >= 2.3.0

Attention: TacitusLogger.Destinations.MongoDb is currently in Alpha phase. This means you should not use it in any production code.

Installation

The NuGet package:

PM> Install-Package TacitusLogger.Destinations.MongoDb

Examples

Adding MongoDb destination with minimal configurations

Using builders:

var logger = LoggerBuilder.Logger()
                          .ForAllLogs()
                          .MongoDb()
                              .WithCollection(logsCollection)
                              .Add()
                          .BuildLogger();

Or directly:

IMongoCollectionProvider mongoCollectionProvider = new DirectCollectionProvider(logsCollection);
IBsonDocumentBuilder bsonDocumentBuilder = new DirectBsonDocumentBuilder();
MongoDbDestination mongoDbDestination = new MongoDbDestination(mongoCollectionProvider, bsonDocumentBuilder);
Logger logger = new Logger();
logger.AddLogDestinations(mongoDbDestination);

With specified MongoDb database and collection name template

Using builders:

var logger = LoggerBuilder.Logger()
                          .ForAllLogs()
                          .MongoDb()
                              .WithCollection(mongoDatabase, "$LogType-logs")
                              .Add()
                          .BuildLogger();

Or directly:

IMongoCollectionProvider mongoCollectionProvider = new NameTemplateCollectionProvider(mongoDatabase, "$LogType-logs"); 
MongoDbDestination mongoDbDestination = new MongoDbDestination(mongoCollectionProvider, new DirectBsonDocumentBuilder());
Logger logger = new Logger();
logger.AddLogDestinations(mongoDbDestination);

With custom MongoDb collection provider

Using builders:

IMongoCollectionProvider customMongoCollectionProvider = new Mock<IMongoCollectionProvider>().Object;

var logger = LoggerBuilder.Logger()
                          .ForAllLogs()
                          .MongoDb()
                              .WithCollection(customMongoCollectionProvider)
                              .Add()
                          .BuildLogger();

Or directly:

IMongoCollectionProvider customMongoCollectionProvider = new Mock<IMongoCollectionProvider>().Object; 
MongoDbDestination mongoDbDestination = new MongoDbDestination(customMongoCollectionProvider, new DirectBsonDocumentBuilder());
Logger logger = new Logger();
logger.AddLogDestinations(mongoDbDestination);

With collection factory method

Using builders:

LogModelFunc<IMongoCollection<BsonDocument>> collectionFactoryMethod = (logModel) =>
{
    if (logModel.LogTypeIsIn(LogType.Error, LogType.Failure, LogType.Critical))
        return importantLogsCollection;
    else
        return logsCollection;
};

var logger = LoggerBuilder.Logger()
                          .ForAllLogs()
                          .MongoDb()
                              .WithCollection(collectionFactoryMethod)
                              .Add()
                          .BuildLogger();

Or directly:

GeneratorFunctionCollectionProvider factoryMethodCollectionProvider = new GeneratorFunctionCollectionProvider((logModel) =>
{
    if (logModel.LogTypeIsIn(LogType.Error, LogType.Failure, LogType.Critical))
        return importantLogsCollection;
    else
        return logsCollection;
}); 
MongoDbDestination mongoDbDestination = new MongoDbDestination(factoryMethodCollectionProvider, new DirectBsonDocumentBuilder());
Logger logger = new Logger();
logger.AddLogDestinations(mongoDbDestination);

With log collections dictionary

Using builders:

var logCollectionsDictionary = new Dictionary<LogType, IMongoCollection<BsonDocument>>()
{
    {LogType.Info, infoLogsCollection },
    {LogType.Success, successLogsCollection },
    {LogType.Event, eventLogsCollection },
    {LogType.Warning, warningLogsCollection },
    {LogType.Error, errorLogsCollection },
    {LogType.Failure, failureLogsCollection },
    {LogType.Critical, criticalLogsCollection }
};

var logger = LoggerBuilder.Logger()
                          .ForAllLogs()
                          .MongoDb()
                              .WithCollection(logCollectionsDictionary)
                              .Add()
                          .BuildLogger();

Or directly:

LogTypeBasedCollectionProvider logTypeBasedCollectionProvider = new LogTypeBasedCollectionProvider(new Dictionary<LogType, IMongoCollection<BsonDocument>>()
{
    {LogType.Info, infoLogsCollection },
    {LogType.Success, successLogsCollection },
    {LogType.Event, eventLogsCollection },
    {LogType.Warning, warningLogsCollection },
    {LogType.Error, errorLogsCollection },
    {LogType.Failure, failureLogsCollection },
    {LogType.Critical, criticalLogsCollection }
});

MongoDbDestination mongoDbDestination = new MongoDbDestination(logTypeBasedCollectionProvider, new DirectBsonDocumentBuilder());
Logger logger = new Logger();
logger.AddLogDestinations(mongoDbDestination);

With log model BSON document

Using builders:

var logger = LoggerBuilder.Logger()
                          .ForAllLogs()
                          .MongoDb()
                              .WithCollection(logsCollection)
                              .WithLogModelBsonDocument()
                              .Add()
                          .BuildLogger();

With custom BSON document builder

Using builders:

IBsonDocumentBuilder customBsonDocumentBuilder = new Mock<IBsonDocumentBuilder>().Object;

var logger = LoggerBuilder.Logger()
                          .ForAllLogs()
                          .MongoDb()
                              .WithCollection(logsCollection)
                              .WithBsonDocument(customBsonDocumentBuilder)
                              .Add()
                          .BuildLogger();

Or directly:

IBsonDocumentBuilder customBsonDocumentBuilder = new Mock<IBsonDocumentBuilder>().Object;  
MongoDbDestination mongoDbDestination = new MongoDbDestination(new DirectCollectionProvider(logsCollection), customBsonDocumentBuilder);
Logger logger = new Logger();
logger.AddLogDestinations(mongoDbDestination);

With BSON document generator function

Using builders:

LogModelFunc<BsonDocument> bsonDocumentGeneratorFunction = (logModel) =>
{
    var logDb = new
    {
        id = logModel.LogId,
        ctx = logModel.Context,
        tags = logModel.Tags,
        src = logModel.Source,
        type = logModel.LogType,
        desc = logModel.Description,
        items = logModel.LogItems,
        date = logModel.LogDate,
    };
    return logDb.ToBsonDocument(); 
};

var logger = LoggerBuilder.Logger() 
                          .ForAllLogs()
                          .MongoDb()
                              .WithCollection(logsCollection)
                              .WithBsonDocument(bsonDocumentGeneratorFunction)
                              .Add()
                          .BuildLogger();

Or directly:

ConverterFunctionBsonDocumentBuilder generatorFunctionBsonDocumentBuilder = new ConverterFunctionBsonDocumentBuilder((logModel) =>
{
    var logDb = new
    {
        id = logModel.LogId,
        ctx = logModel.Context,
        tags = logModel.Tags,
        src = logModel.Source,
        type = logModel.LogType,
        desc = logModel.Description,
        items = logModel.LogItems,
        date = logModel.LogDate,
    };
    return logDb.ToBsonDocument();
});

MongoDbDestination mongoDbDestination = new MongoDbDestination(new DirectCollectionProvider(logsCollection), generatorFunctionBsonDocumentBuilder);
Logger logger = new Logger();
logger.AddLogDestinations(mongoDbDestination);

License

APACHE LICENSE 2.0

See also

TacitusLogger:

Destinations:

Dependency injection:

  • TacitusLogger.DI.Ninject - Extension for Ninject dependency injection container that helps to configure and add TacitusLogger as a singleton.
  • TacitusLogger.DI.Autofac - Extension for Autofac dependency injection container that helps to configure and add TacitusLogger as a singleton.
  • TacitusLogger.DI.MicrosoftDI - Extension for Microsoft dependency injection container that helps to configure and add TacitusLogger as a singleton.

Log contributors: