使用自定义接收器与ServiceStack.Logging.Serilog?

时间:2018-08-09 20:52:26

标签: servicestack serilog

是否有一种非显而易见的方式(至少对我而言)添加自定义接收器,例如MongoDB或MicrosoftTeams作为在ServiceStack框架中实例化Serilog工厂的一部分,还是会出现自己的工厂滚动和ILog实现的情况?

PM> Install-Package ServiceStack.Logging.Serilog

LogManager.LogFactory =  new SerilogFactory();

ServiceStack Logging

Serilog

Example: MongoDB Sink

这可以在不使用ServiceStack实现的情况下工作,但是它被认为是错误的形式吗?

public override void Configure(Container container)
{
    Log.Logger = new LoggerConfiguration()
        .WriteTo.MongoDBCapped("mongodb://mymongourl:27017/mylogs",
            collectionName: "mycollectionoflogs", cappedMaxSizeMb: 50,
            cappedMaxDocuments: 10000)
        .CreateLogger();

    SetConfig(new HostConfig
    {
        DefaultRedirectPath = "/metadata",
        DebugMode = AppSettings.Get(nameof(HostConfig.DebugMode), false)              
    });
}

以及在ServiceInterface消息实现中:

public object Any(MyRequest request)
{
    Log.Information("I'm a lumberjack and I'm OK");

    return new MyRequestResponse
    {
        Result = $"{ results.Chop() }"
    };
}

1 个答案:

答案 0 :(得分:1)

我刚刚在this commit中添加了一个构造函数重载以使用自定义Serilog记录器,此更改可从现在为available on MyGet的v5.1.1中获得。

通过此更改,您可以将自定义的Serilog记录器与ServiceStack的SerilogFactory一起传递,例如:

LogManager.LogFactory = new SerilogFactory(new LoggerConfiguration()
    .WriteTo.MongoDBCapped("mongodb://mymongourl:27017/mylogs",
        collectionName: "mycollectionoflogs", cappedMaxSizeMb: 50,
        cappedMaxDocuments: 10000)
    .CreateLogger());

您可以像示例中一样直接使用Serilog记录器,除了它无法捕获ServiceStack的内置日志,或者以后不能用其他ServiceStack loggers替代它。