1. 程式人生 > >NLog 日誌框架搭建講解(親測有效,代碼齊全)

NLog 日誌框架搭建講解(親測有效,代碼齊全)

希望 auth ble log4 context tar 網上 targe localhost

前言:最近,搭建代碼框架時,想要找一款日誌框架。因為之前都是使用Log4net,所以這次打算使用一款新的NLog嘗試下,感謝網上的這麽多朋友發布的博文,對我有不少的啟發作用。不過在對於寫日誌到數據庫這一點,寫對的為數不多,所以,我也記錄下,算是個學習總結,也希望能幫助其他需要的童鞋。(本文不詳細講解NLog各參數,以及與Log4net的區別,大家可以到網上去搜,很多)

一、對項目添加NLog

選擇自己想要添加的項目,使用Nuget添加NLog相關插件

技術分享

安裝好後,項目裏會引用 NLog.dll 和 NLog.config,NLog.xsd

二、對NLog.config進行配置

NLog.config默認僅給出地址,很少的配置,其余的需要我們自己進行填寫

targets標簽:是填寫我們所需要的日誌級別,裏面有 Console,Debugger,File,Database,Mail 等

rules標簽:targets標簽要配合rules使用,rules指定了,每個日誌所輸出的目錄地址

<targets>
    <target name="console" xsi:type ="Console" />
    <target name="debugger" xsi:type="Debugger" layout="${date:format=HH\:mm\:ss.fff}: ${message}" />
    <target name="
error_file" xsi:type="File" fileName="${basedir}/Logs/Error/${shortdate}/error.txt" maxArchiveFiles="30" layout="${longdate} | ${level:uppercase=false} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" /> <target name="
info" xsi:type="File" fileName="${basedir}/Logs/Info/${shortdate}/info.txt" maxArchiveFiles="30" layout="${longdate} | ${level:uppercase=false} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" /> <target name="database" xsi:type="Database" connectionString ="Data Source=localhost;port=3306;Initial Catalog=Be_Log;user id=root;password=AllenLee;" commandText="INSERT INTO t_user_log(user_id,user_name,action_type,user_ip,add_time,remark) Values(@user_id,@user_name,@action_type,@user_ip,@add_time, @remark);" > <parameter name = "@user_id" layout = "${event-context:item=user_id}"/> <parameter name = "@user_name" layout = "${event-context:item=user_name}" /> <parameter name = "@action_type" layout = "${event-context:item=action_type}"/> <parameter name = "@user_ip" layout = "${event-context:item=user_ip}" /> <parameter name = "@add_time" layout = "${event-context:item=add_time}" /> <parameter name = "@remark" layout = "${event-context:item=remark}" /> <dbProvider>MySql.Data.MySqlClient</dbProvider> </target> <!-- 發生致命錯誤發送郵件日誌 --> <target name="email" xsi:type="Mail" header="-----header------" footer="-----footer-----" layout="${longdate} ${level} ${callsite} ${message} ${exception:format=Message, Type, ShortType, ToString, Method, StackTrace}" html="false" encoding="UTF-8" addNewLines="true" subject="${message}" to="" from="" body="${longdate} ${level} ${callsite} ${message} ${exception:format=Message, Type, ShortType, ToString, Method, StackTrace}" smtpUserName="" enableSsl="false" smtpPassword="" smtpAuthentication="Basic" smtpServer="smtp.163.com" smtpPort="25"> </target>
</targets>

<rules>
<logger name="*" writeTo="console" />
<logger name="*" minlevel="Debug" writeTo="debugger" />
<logger name="*" minlevel="Error" writeTo="error_file" />
<logger name="*" level="Info" writeTo="info" />
<logger name="*" writeTo="database" />
</rules>

三、日誌內容存儲

有了以上配置,我們就可以寫一處簡單程序來進行測驗,看是否能生成日誌文件。

(1)日誌文件生成(代碼用的是MVC,大家可以隨意用其他代碼測試)

技術分享

通過這幾個,可以把日誌輸入到文件,路徑就在我們前面 target 所配置的裏面

技術分享

打開一個具體文件查看,可見內容和我們程序寫的是一樣的:

技術分享

(2)日誌寫入數據庫(註:此處是MySql,其他請各位自己嘗試)

在MySql中,新建表 t_user_log 結構,與前面 target 中所列的字段相同,將連接字符串等寫上。

註:<dbProvider>MySql.Data.MySqlClient</dbProvider> 這一個千萬不要忘了

然後我們可以使用代碼來進行測試:

private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
LogEventInfo lei = new LogEventInfo();
lei.Properties["user_id"] = "18";
lei.Properties["user_name"] = "AllenLee";
lei.Properties["action_type"] = "Created Log";
lei.Properties["user_ip"] = "172.16.0.132";
lei.Properties["add_time"] = DateTime.Now;
lei.Properties["remark"] = "This is a remark";
lei.Level = LogLevel.Info;
Logger.Log(lei);

執行後,數據庫表數據變化:

技術分享

可見數據能正常寫入到數據庫了,至此,無論是寫文件,還是寫數據庫,NLog 都可以實現了。這樣在項目裏面操作起來就方便多了

大家如果有什麽疑問,歡迎來討論!

                                       

NLog 日誌框架搭建講解(親測有效,代碼齊全)