Serilog集成在.Net core 2.0类库项目中

时间:2017-10-12 04:05:14

标签: asp.net-core .net-core serilog

我想使用Serilog登录.Net core 2.0类库项目。我搜索了很多地方,没有找到任何将Serilog集成到类库项目中的示例。有人可以参考样品吗?

感谢。

2 个答案:

答案 0 :(得分:9)

您应该在类库中设置Serilog日志记录。类库供其他应用程序使用,例如ASP.NET Core Web应用程序或控制台应用程序等。类库不是应用程序的入口点,因此它不应该负责设置应用程序范围的事情,如日志记录。这样做也很困难,因为类库没有中心入口点(按设计),那么您希望在哪里准确设置日志记录?

相反,您的库应该只是依赖进行日志记录,并且有一种方法可以在需要时接收记录器。如果您的应用程序是在考虑依赖注入的情况下构建的,那么您可以将记录器注入所需的位置。

然后,应用程序入口点负责设置日志记录并为您的库提供日志记录基础结构。

因此,如果您在ASP.NET Core上下文中使用它,只需按照guidelines on how to set up Serilog with ASP.NET Core

答案 1 :(得分:0)

您可以创建一个静态类记录器,它是类库上的日志记录配置入口点,如下所示:

public static Microsoft.Extensions.Hosting.IHostBuilder UseGloabalLogger(this Microsoft.Extensions.Hosting.IHostBuilder app)
    {
        return app.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                .ReadFrom.Configuration(hostingContext.Configuration)
                .WriteTo.File(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\LOG\\"+string.Format("Logging-{0}.txt",DateTime.Now.ToString("yyyyMMdd")))
                .WriteTo.Debug()
                .WriteTo.Console(
                    outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}"));
    }

然后在webApi o WebApp的Program.cs中,您必须导入引用serilog的类库,并使用

对其进行初始化。
public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .UseGloabalLogger()
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

最佳实践希望任何日志记录配置都必须插入到appsettings.json中

“ Serilog”:{ “最低级别”:{ “默认”:“信息”,//或错误或任何其他 “覆盖”:{ “ Microsoft”:“警告”, “系统”:“警告” } ..................... } }