ASP.NET Core使用Elasticsearch記錄NLog日志


ASP.NET Core使用Elasticsearch記錄NLog日志

1、新建一個 ASP.NET Core項目

 

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

 

 

 


免責聲明!

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



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