asp.net core 日誌記錄到elk

關於ELK的安裝大家可以參考ubuntu18 docker中部署ELK 和 caas/docker-elk ,

首先需要在ELK中創建一個index patterns

首先我們創建一個aspnetcore webapi項目

1.添加如下引用:

Serilog
Serilog.Sinks.ElasticSearch
Serilog.Extensions.Logging

2.修改appsettings.json文件:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "AllowedHosts": "*",
  "ElasticConfiguration": {
    "Uri": "http://192.168.100.5:5000/"
  }
}

3.修改Startup.cs文件

  public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
             var elasticUri = Configuration["ElasticConfiguration:Uri"];
            Log.Logger = new LoggerConfiguration().Enrich.FromLogContext().MinimumLevel.Debug() .WriteTo.Elasticsearch(
                new ElasticsearchSinkOptions(new Uri(elasticUri)) { MinimumLogEventLevel=LogEventLevel.Information,AutoRegisterTemplate=true,  })
                .CreateLogger();
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true));
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

4.修改controller:

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

        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            _logger.LogInformation($"oh hai there! : {DateTime.UtcNow}");
            try
            {
                throw new Exception("oops. i haz cause error in UR codez.");
            }
            catch (Exception ex)
            {
                _logger.LogCritical("ur app haz critical error", ex);
                _logger.LogError(ex, "ur code iz buggy.");
            }
            return new string[] { "value1", "value2" };
        }

5.運行項目然後在elk中驗證

備註:網上關於elk的地址都是http://xxx:9200 (elasticsearch地址), 我在測試的時候發現怎麼都沒有寫入到elk,後來改爲5000(Logstash的地址)就好了

參考:

Logging with ElasticSearch, Kibana, ASP.NET Core and Docker

thecarlo/elastic-kibana-netcore-serilog

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章