ElasticSearch+NLog實(shí)現(xiàn).Net Core分布式日志管理
本文轉(zhuǎn)載自微信公眾號(hào)「UP技術(shù)控」,作者conan5566。轉(zhuǎn)載本文請(qǐng)聯(lián)系UP技術(shù)控公眾號(hào)。
概述
Elasticsearch可廣泛應(yīng)用于日志分析、全文檢索、結(jié)構(gòu)化數(shù)據(jù)分析等多種場景,大幅度降低維護(hù)多套專用系統(tǒng)的成本,在開源社區(qū)非常受歡迎。在系統(tǒng)中,如果將日志作為文件輸出,查看系統(tǒng)日志將非常不便;如果將日志保存到數(shù)據(jù)庫中,又不能進(jìn)行全文搜索。在這里我們將日志輸出到ElasticSearch中,借助Kibana再查找日志。
實(shí)現(xiàn)方式
1、配置es服務(wù)地址
- {
- "ConnectionStrings": {
- "ElasticSearchServerAddress": "http://localhost:9200"
- },
- "Logging": {
- "LogLevel": {
- "Default": "Warning"
- }
- },
- "AllowedHosts": "*"
- }
2、配置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>
3、測試寫入日志
- // GET api/values
- [HttpGet]
- public ActionResult<IEnumerable<string>> Get()
- {
- var result = new string[] { "value1", "value2" };
- _logger.LogInformation(JsonConvert.SerializeObject(result));
- return result;
- }
效果