.NETCore微服务探寻(三) - 分布式日志 (2)

准备需要配置的信息,这里我们使用的是appsettings.json文件

{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "ServiceOptions": { "ServiceIP": "localhost", "ServiceName": "Auth", "Port": 5800, "HealthCheckUrl": "/api/health", "ConsulOptions": { "Scheme": "http", "ConsulIP": "localhost", "Port": 8500 } }, "Serilog": { "WriteTo": [ { "Name": "Elasticsearch", "Args": { "nodeUris": "http://localhost:9200;:9200/", "indexFormat": "auth-{0:yyyy-MM-dd}", "autoRegisterTemplate": true } } ] } }

然后更改Serilog的相关初始化代码为

public Startup(IConfiguration configuration,IHostEnvironment hostEnvironment) { // 读取配置文件 var builder = new ConfigurationBuilder() .SetBasePath(hostEnvironment.ContentRootPath) .AddJsonFile("appsettings.json", true, true) .AddJsonFile($"appsettings.{hostEnvironment.EnvironmentName}.json", true, true) .AddEnvironmentVariables(); Configuration = builder.Build(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(Configuration) .CreateLogger(); }

3.将日志记录操作转为异步

由于serilog.sinks实现大多都是同步的方式实现,所以如果需要以异步的方式收集日志的话需要引用Serilog.Sinks.Async这个库,并更改相关代码。详细请见Serilog.Sinks.Async官方仓库,
同样,异步的方式也可以通过配置文件实现,可以查看官方仓库,这里只使用硬编码的方式。

public Startup(IConfiguration configuration,IHostEnvironment hostEnvironment) { // 读取配置文件 var builder = new ConfigurationBuilder() .SetBasePath(hostEnvironment.ContentRootPath) .AddJsonFile("appsettings.json", true, true) .AddJsonFile($"appsettings.{hostEnvironment.EnvironmentName}.json", true, true) .AddEnvironmentVariables(); Configuration = builder.Build(); Log.Logger = new LoggerConfiguration() .WriteTo.Async(configure => { configure .Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code); configure .Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200")) { AutoRegisterTemplate = true, IndexFormat = "auth-{0:yyyy-MM-dd}", }); }) .CreateLogger(); } 3.运行并查看

启动Elasticserach,Kibana,项目后

查看控制台,发现同样的日志输出了两遍,这是因为AspNetCore默认实现的LoggerProvider 没有清除所以会导致 打印输出,我们在启动时清除默认Provider即可

.NETCore微服务探寻(三) - 分布式日志

清除LoggerProvider

.NETCore微服务探寻(三) - 分布式日志

然后运行并查看日志,是不是清爽了很多

.NETCore微服务探寻(三) - 分布式日志

然后我们访问Kiabana查看我们刚刚收集的日志

访问 :5601 Kibana默认项目地址,不同Kibana版本页面会有差异

.NETCore微服务探寻(三) - 分布式日志

点击Management建立我们的日志收集模型

.NETCore微服务探寻(三) - 分布式日志

这里由于我已经建立过其他的模块的信息,所以可以看到我已经创建的信息,这里我们点击创建新的信息

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzyzpw.html