概述
Elasticsearch可廣泛應用於日誌分析、全文檢索、結構化數據分析等多種場景,大幅度降低維護多套專用系統的成本,在開源社區非常受歡迎。在系統中,如果將日誌作爲文件輸出,查看系統日誌將非常不便;如果將日誌保存到數據庫中,又不能進行全文搜索。在這裏我們將日誌輸出到ElasticSearch中,藉助Kibana再查找日誌。
實現方式
1、配置es服務地址
{
"ConnectionStrings": {
"ElasticSearchServerAddress": "http://localhost:9200"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
2、配置nlog.config
<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
[ ]
public ActionResult<IEnumerable<string>> Get()
{
var result = new string[] { "value1", "value2" };
_logger.LogInformation(JsonConvert.SerializeObject(result));
return result;
}
效果
本文分享自微信公衆號 - 一線碼農聊技術(dotnetfly)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。