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


前言:最近,搭建代碼框架時,想要找一款日志框架。因為之前都是使用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 都可以實現了。這樣在項目里面操作起來就方便多了

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

 

                                       


免責聲明!

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



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