Serilog:如何在Asp.net Core的“类库”中使用日志记录

4

我正在使用Serilog来记录asp.net core网站中的日志,并且项目中使用了'class library'。

  1. 如何在asp.net core类库中实现日志记录?
  2. 有没有办法在“类库”中独立实现日志记录?

Gurpreet Kailey,您能分享一下您在类库中实现Serilog的代码吗?我正在尝试实现它,但不确定该如何着手。 - veena panakanapalli
1个回答

5

简单地说,您只需要将Microsoft.Extensions.Logging NuGet包添加到您的类库中,然后在您的类中注入ILogger<T>

public class MyClass
{
    private readonly ILogger _logger;

    public MyClass(ILogger<MyClass> logger)
    {
        _logger = logger;
    }

    public void DoSomething()
    {
        _logger.LogInformation("I'm doing something here.");
    }
}

ILogger 是一个 门面,是用于日志记录的API,实际上它本身并不做任何日志记录。当您有一个真正的应用程序使用它时,实际的日志记录是通过您插入门面的提供者进行的。这就是像Serilog这样的东西会出现的地方。在您的实际应用程序中,您将配置日志记录以使用Serilog,然后每当任何东西调用ILogger上的方法时,它都会被代理到您的实际真实日志记录提供程序(Serilog),然后Serilog进行实际的日志记录。


我收到了以下错误信息:在尝试激活“ConnectionManagerProvider”时,无法解析类型为“Microsoft.Extensions.Logging.ILogger`1[ConnectionManagerProvider]”的服务。我在类中使用了以下代码:private readonly ILogger _logger;public ConnectionManagerProvider(ILogger<ConnectionManagerProvider> logger) { _logger = logger; } - Gurpreet Kailey
3
除了Chris Pratt提供的解决方案外,还要确保将'MyClass'类添加到asp.net core的依赖项中。 - Gurpreet Kailey
Gurpreet Kailey,您能否分享一下您在类库中实现Serilog的代码?我正在尝试实现它,但不确定如何着手。 - veena panakanapalli
@veenapanakanapalli,我无法在此处分享完整的代码,我将尝试通过示例进行演示。为此,您需要等待一天,请告诉我这对您是否可以接受。 - Gurpreet Kailey
但是,我该如何在 gRPC 服务中使用 MyClass?如果我执行 new MyClass(),它将期望在构造函数中有一个记录器...但是,如果我在构造函数中传递一个记录器,它现在将使用 gRPC 服务实例的记录器,这不是我想要的...我刚开始学习 C#,但是对于这里有多少“魔法”,我感到非常疯狂,并且已经搜索了很长时间,只是为了从类库中进行简单的日志记录...请有人帮帮我... - AustEcon
好的,我通过更加熟悉 DI 的工作原理并创建 IMyClass(接口),然后在 Startup.cs 中执行 services.AddTransient<IMyClass, MyClass>(); 来“激活”此类库的 DI,解决了这个问题。 - AustEcon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接