Serilog输出日志到mysql_Asp.Net Core 项目中使用 Serilog 输出日志到 Elasticsearch

本文介绍了如何在Asp.Net Core项目中配置Serilog,将其日志输出到Elasticsearch。首先,通过Docker启动Elasticsearch和Kibana。然后,在项目中添加必要的NuGet包,修改appsettings.json配置文件,并在Program.cs中设置Serilog。通过日志记录示例展示了如何在API中使用日志,并在Kibana中查看和定制日志显示。
摘要由CSDN通过智能技术生成

环境说明

服务器:CentOS 7,IP:172.17.79.83

开发环境:Win10 + VS2019

Docker 启动 Elasticsearch

docker run --name elasticsearch --restart always -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.5.0

69651c8dd1b0d006d69eab3204044ac7.png

Docker 启动 Kibana

docker run --name kibana --restart always -d --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.5.0

5756c933a199b68d4fd0cba685e752ba.png

项目配置

创建一个 WebAPI 项目,添加 nuget 包 Serilog.AspNetCore(目前最新版本 3.4.0)、Serilog.Sinks.Elasticsearch(v8.2.0)、Serilog.Exceptions(v5.6.0)。

将默认的 appsettings.json 中的内容替换成一下内容。

{"Serilog": {"MinimumLevel": {"Default": "Information","Override": {"Microsoft": "Information","System": "Warning"}

}

},"ElasticConfiguration": {"Uri": "http://172.17.79.83:9200"},"AllowedHosts": "*"}

Program.cs 中配置 Serilog

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 usingSystem;2 usingSystem.Reflection;3 usingMicrosoft.AspNetCore.Hosting;4 usingMicrosoft.Extensions.Configuration;5 usingMicrosoft.Extensions.Hosting;6 usingSerilog;7 usingSerilog.Sinks.Elasticsearch;8 usingSerilog.Exceptions;9

10 namespaceEFKlog11 {12 public classProgram13 {14 private static readonly string env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");15 public static void Main(string[] args)16 {17 ConfigureLogging();18

19 CreateHostBuilder(args).Build().Run();20 }21

22 public static IHostBuilder CreateHostBuilder(string[] args) =>

23 Host.CreateDefaultBuilder(args)24 .ConfigureWebHostDefaults(webBuilder =>

25 {26 webBuilder.UseStartup()27 .ConfigureAppConfiguration(cfg=>

28 {29 cfg.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);30 cfg.AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: true);31 })32 .UseSerilog();33 });34

35 private static voidConfigureLogging()36 {37 var cfg = newConfigurationBuilder()38 .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)39 .AddJsonFile($"appsettings.{env}.json", optional: true, reloadOnChange: true)40 .Build();41 Log.Logger = newLoggerConfiguration()42 .Enrich.FromLogContext()43 .Enrich.WithExceptionDetails()44 .Enrich.WithProperty("Environment",env)45 .WriteTo.Debug()46 .WriteTo.Console()47 .WriteTo.Elasticsearch(ConfigureElasticSink(cfg, env))48 .ReadFrom.Configuration(cfg)49 .CreateLogger();50 }51

52 private static ElasticsearchSinkOptions ConfigureElasticSink(IConfigurationRoot cfg,stringenv)53 {54 return new ElasticsearchSinkOptions(new Uri(cfg["ElasticConfiguration:Uri"]))55 {56 AutoRegisterTemplate = true,57 IndexFormat = $"{Assembly.GetExecutingAssembly().GetName().Name.ToLower().Replace(".","-")}-{env?.ToLower().Replace(".","-")}-{DateTime.UtcNow:yyyy-MM}"

58 };59 }60 }61 }

Program.cs

在 api 中记录日志。

public IEnumerableGet()

{

_logger.LogInformation("WeatherForecast api executed at {date}",DateTime.UtcNow);try{throw new Exception("some bad code was executed...");

}catch(Exception ex)

{

_logger.LogError(ex,"调用天气预报 api 出现错误!");

}var rng = newRandom();return Enumerable.Range(1, 5).Select(index => newWeatherForecast

{

Date=DateTime.Now.AddDays(index),

TemperatureC= rng.Next(-20, 55),

Summary=Summaries[rng.Next(Summaries.Length)]

})

.ToArray();

}

启动项目,可以看到控制台日志格式发生了一点变化,同时日志消息使用了不同的颜色来区分。

4a06fd3c3a67e974cb0b889722a43cfc.png

在 kibana 中查看日志,需要先创建一个索引。index 格式在Program.cs 中有设置,这里保持写法一致就好。

452e827e207baa3b6c187208dc059412.png

299cc57cca0ec58944dfcfab2ce50a6c.png

查看 kibana 面板,需要展示的列可以自定义,比如添加 exception 列。

49d65d18ca1026b9aa6a964d0bf79ebe.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值