ASP.NET Core使用Elasticsearch記錄NLog日誌 1、新建一個 ASP.NET Core項目 2、安裝Nuge包 運行:Install-Package NLog.Web.AspNetCore 運行:Install-Package NLog 運行:Install-package ...
2、安裝Nuge包
運行:Install-Package NLog.Web.AspNetCore
運行:Install-Package NLog
運行:Install-package NLog.Targets.ElasticSearch
3、編寫NLog配置文件(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>
<target name="ElasticSearch" xsi:type="ElasticSearch"
ConnectionStringName="http://localhost:9200"
index="Jon.NLog-${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>
主要配置說明:
ConnectionStringName:連接字元串
Index:ES索引
documentType:ES類型
layout:佈局
layout可配置變數如下:
$ {activityid} - 將一個System.Diagnostics跟蹤關聯ID放入日誌中。
$ {all-event-properties} - 記錄所有事件上下文數據。
$ {appdomain} - 當前的應用程式域。
$ {assembly-version} - 預設應用程式域中可執行文件的版本。
$ {basedir} - 當前應用程式域的基本目錄。
$ {callsite} - 呼叫站點(類名稱,方法名稱和源信息)。
$ {callsite-linenumber} - 呼叫站點源行號。
$ {counter} - 一個計數器值(每個佈局渲染都會增加)。
$ {currentdir} - 應用程式的當前工作目錄。
$ {date} - 當前日期和時間。
$ {document-uri} - 托管當前Silverlight應用程式的HTML頁面的URI。
$ {environment} - 環境變數。
$ {event-properties} - 記錄事件屬性數據 - 重命名$ {event-context}。
$ {exception} - 通過調用其中一個Logger * Exception()方法提供的異常信息。
$ {file-contents} - 渲染指定文件的內容。
$ {gc} - 關於垃圾收集器的信息。
$ {gdc} - 全局診斷上下文項目。字典結構來保存每個應用程式實例值。
$ {guid} - 全局唯一標識符(GUID)。
$ {identity} - 線程標識信息(名稱和認證信息)。
$ {install-context} - 安裝參數(傳遞給InstallNLogConfig)。
$ {level} - 日誌級別。
$ {literal} - 一個字元串文字。
$ {log4jxmlevent} - 與log4j,Chainsaw和NLogViewer相容的XML事件描述。
$ {logger} - 記錄器名稱。
$ {longdate} - 日期和時間格式很長,可排序yyyy-MM-dd HH:mm:ss.ffff。
$ {machinename} - 進程正在運行的機器名稱。
$ {mdc} - 映射的診斷上下文 - 一個線程局部結構。
$ {mdlc} - 非同步映射的診斷上下文 - 一個線程局部結構。
$ {message} - 格式化的日誌消息。
$ {ndc} - 嵌套的診斷上下文 - 一個線程局部結構。
$ {ndlc} - 非同步嵌套診斷上下文 - 一個線程局部結構。
$ {newline} - 換行符。
$ {nlogdir} - NLog.dll所在的目錄。
$ {performancecounter} - 性能計數器。
$ {processid} - 當前進程的標識符。
$ {processinfo} - 關於正在運行的進程的信息。
$ {processname} - 當前進程的名稱。
$ {processtime} - 格式為HH:mm:ss.mmm的處理時間。
$ {qpc} - 高精度計時器,基於從QueryPerformanceCounter()返回的值(可選地轉換為秒)。
$ {registry} - 來自註冊表的值。
$ {sequenceid} - 日誌序列標識
$ {shortdate} - 可排序格式的短日期yyyy-MM-dd。
$ {sl-appinfo} - 有關Silverlight應用程式的信息。
$ {specialfolder} - 系統特殊文件夾路徑(包括我的文檔,我的音樂,程式文件,桌面等)。
$ {stacktrace} - 堆棧跟蹤渲染器。
$ {tempdir} - 一個臨時目錄。
$ {threadid} - 當前線程的標識符。
$ {threadname} - 當前線程的名稱。
$ {ticks} - 當前日期和時間的Ticks值。
$ {time} - 以24小時可排序格式HH:mm:ss.mmm的時間。
$ {var} - 渲染變數(4.1中新增)
$ {windows-identity} - 線程Windows身份信息(用戶名)。
包裝
$ {cached} - 將緩存應用於另一個佈局輸出。
$ {filesystem-normalize} - 通過用安全字元替換文件名中不允許的字元。
$ {json-encode} - 使用JSON規則轉義另一個佈局的輸出。
$ {lowercase} - 將另一個佈局輸出的結果轉換為小寫。
$ {onexception} - 僅在為日誌消息定義異常時才輸出內部佈局。
$ {pad} - 將填充應用於另一個佈局輸出。
$ {replace} - 用另一個字元串替換另一個佈局輸出中的字元串。
$ {replace-newlines} - 用另一個字元串替換換行符。
$ {rot13} - 用ROT-13解碼“encrypted”文本。
$ {trim-whitespace} - 修剪另一個佈局渲染器的結果中的空白。
$ {uppercase} - 將另一個佈局輸出的結果轉換為大寫。
$ {url-encode} - 編碼另一個佈局輸出的結果以用於URL。
$ {when} - 只有在滿足指定條件時才輸出內部佈局。
$ {whenEmpty} - 當內部佈局產生空結果時輸出替代佈局。
$ {WrapLine} - 在指定的行長度處包裝另一個佈局輸出的結果。
$ {xml-encode} - 將另一個佈局輸出的結果轉換為XML相容。
NLog.Extended軟體包
$ {appsetting} - 應用程式配置設置。
NLog.Web包
$ {aspnet-MVC-Action} - ASP.NET MVC動作名稱
$ {aspnet-MVC-Controller} - ASP.NET MVC控制器名稱
$ {aspnet-Application} - ASP.NET應用程式變數。
$ {aspnet-Item} - ASP.NET HttpContext項目變數。
$ {aspnet-TraceIdentifier} - ASP.NET跟蹤標識符
$ {aspnet-Request} - ASP.NET請求變數。
$ {aspnet-Request-Cookie} - ASP.NET請求cookie內容。
$ {aspnet-Request-Host} - ASP.NET請求主機。
$ {aspnet-Request-Method} - ASP.NET請求方法(GET,POST等)。
$ {aspnet-Request-IP} - 客戶端IP。
$ {aspnet-Request-QueryString} - ASP.NET請求查詢字元串。
$ {aspnet-Request-Referrer} - ASP.NET請求引用者。
$ {aspnet-Request-UserAgent} - ASP.NET請求useragent。
$ {aspnet-Request-Url} - ASP.NET請求URL。
$ {aspnet-Session} - ASP.NET Session變數。
$ {aspnet-SessionId} - ASP.NET會話ID變數。
$ {aspnet-User-isAuthenticated} - ASP.NET用戶身份驗證?
$ {aspnet-User-AuthType} - ASP.NET用戶身份驗證。
$ {aspnet-User-Identity} - ASP.NET用戶變數。
$ {iis-site-name} - IIS站點名稱。
4、Program、Startup配置
4.1、Program配置NLog
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseNLog()//添加NLog中間件
.UseStartup<Startup>();
}
4.2、Startup添加NLog中間件
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseCookiePolicy();
loggerFactory.AddNLog();//用NLog記錄日誌
env.ConfigureNLog("NLog.config");//配置NLog文件
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
5、正常運行如下
查看kibana