.net core使用NLog+Elasticsearch記錄日志


     在微服務或分布式系統中,如果將日志作為文件輸出,查看系統日志將非常不便;如果將日志保存到數據庫中,又不能進行全文搜索。在這里我們將日志輸出到ElasticSearch中,借助Kibana再查找日志。

添加Nuget引用

       需要添加兩個Nuget引用:NLog.Web.AspNetCore和NLog.Targets.ElasticSearch

配置

       新增nlog.config配置文件,並設置屬性生成操作為內容,復制到輸出目錄為始終復制,內容如下。

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      internalLogToConsole="true">
  <extensions>
    <add assembly="NLog.Targets.ElasticSearch"/>
  </extensions>

  <targets>
    <!--ElasticSearch保存日志信息-->
    <target name="ElasticSearch" xsi:type="ElasticSearch" ConnectionStringName="ElasticSearchServerAddress"  
            index="userapi-${date:format=yyyy.MM.dd}" documentType="doc" includeAllProperties="true"
                 layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${logger} ${message} ${exception:format=toString}">
      <field name="MachineName" layout="${machinename}" />
      <field name="Time" layout="${longdate}" />
      <field name="level" layout="${level:uppercase=true}" />
      <field name="logger" layout=" ${logger}" />
      <field name="message" layout=" ${message}" />
      <field name="exception" layout=" ${exception:format=toString}" />
      <field name="processid" layout=" ${processid}" />
      <field name="threadname" layout=" ${threadname}" />
      <field name="stacktrace" layout=" ${stacktrace}" />
      <field name="Properties" layout="${machinename} ${longdate} ${level:uppercase=true} ${logger} ${message} ${exception}|${processid}|${stacktrace}|${threadname}" />
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="INFO" writeTo="ElasticSearch" />
  </rules>
</nlog>

      修改appsettings.json,增加如下節點,注意,經調試源碼才發現,這里必須將連接增加到ConnectionStrings節點下,ElasticSearchServerAddress節點名稱對應nlog.config中ConnectionStringName的名稱。

"ConnectionStrings": {
    "ElasticSearchServerAddress": "http://192.168.2.97:9200,http://192.168.2.101:9200,http://192.168.2.102:9200"
}

修改代碼

     修改Program.cs文件:

public static void Main(string[] args)
{
      NLogBuilder.ConfigureNLog("nlog.config");
      BuildWebHost(args).Run();
 }

public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseNLog()
                .UseStartup<Startup>()
                .Build();

  修改Startup.cs文件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
   loggerFactory.AddNLog();
}

測試

    public class ValuesController : Controller
    {
        private ILogger _logger;

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

        [HttpGet]
        public IEnumerable<string> Get()
        {
            _logger.LogInformation("測試一下,不要緊張!");
            return new string[] { "value1", "value2" };
        }
}

      kibana里查詢截圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM