servicestack - 将自定义接收器与 ServiceStack.Logging.Serilog 一起使用?

标签 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() }"
    };
}

最佳答案

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

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

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

您可以像在您的示例中一样直接使用 Serilog 记录器,除了它无法捕获 ServiceStack 的内置日志或以后无法将其替换为任何其他 ServiceStack loggers .

关于servicestack - 将自定义接收器与 ServiceStack.Logging.Serilog 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51775580/

相关文章:

servicestack - 在哪里创建 MySql 表 ServiceStack 和 OrmLite

rest - 在 ServiceStack 中组合 URL 和 POST 变量

c# - 使用静态 `Serilog.ILogger` 安全吗

c# - 如何将完整的对象添加到 Serilog Azure 表存储接收器,该对象未在消息中写出?

servicestack - 使用 ServiceStack.OrmLite 填充 POCO

ssl - 如何使用 fastcgi-mono-server4 和 nginx 启用 HTTPS?

请求 DTO 中的 ServiceStack 和动态属性

.net - serilog 中 seq 的摄取端口

c# - 使用当前的 Serilog ILogger 实例将消息格式化为字符串(但不打印它)

c# - 使用 Serilog 登录到事件查看器时动态设置 EventID