Nlog 簡單的快速攻略


廢話不多說直接進入正題。

1、在項目中加入Nlog的應用

安裝后會出現兩個文件

2、我們打開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">

  <!-- 
  See https://github.com/nlog/nlog/wiki/Configuration-file 
  for information on customizing logging rules and outputs.
   -->
  <!-- 定義變量
  projectName 項目名稱
  logDirectory 文件路徑
  -->
  <variable name="projectName" value="test"/>

  <variable name="logDirectory" value="F:/nlog/${projectName}/${shortdate}"/>
  <targets>
    <!-- 定義輸出模板:
        type="File":這個記錄方式為文件類型
        fileName="${logDirectory}/All.log":表示輸出到文件All.log中
        layout="...":輸出文件中錯誤的顯示格式
        ${logDirectory}:為上述定義的路徑
        ${longdate}:輸出長日期 yyyy-MM-dd HH:mm:ss.ffff(例:2013-01-31 14:49:21.2120)
        ${level}:錯誤等級(由低到高為Trace,Debug,Info,Warn,Error,Fatal)
        ${newline}:輸出 新的一行
        ${stacktrace}:輸出 堆棧信息
        ${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}:輸出 命名空間.類名.方法名(文件路徑:行號)
        ${message}:輸出錯誤信息-->
    <target xsi:type="File" name="logfiles" fileName="${logDirectory}/${shortdate}.log" layout="${longdate} ${level} ${message} ${stacktrace} ${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}" />
  </targets>
  <rules>
    <!-- 定義輸出日志:
        name="*":記錄所有信息
        minlevel="Trace":記錄的最低錯誤級別為Trace
        writeTo="logfiles":日志寫入logfiles的target中-->
    <logger name="*" minlevel="Trace" writeTo="logfiles" />
  </rules>
</nlog>

3、用簡單的控制台程序測試一下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NLog;

namespace NlogDemo
{
    class Program
    {
        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
        static void Main(string[] args)
        {
            WriteLog();
        }
        public static void WriteLog()
        {
            Logger.Log(LogLevel.Error, "nlog test error");
        }
    }
}

F5運行之后在我設置的路徑下會有個以時間命名的log文件

日志內容

日志記錄的內容與你在配置文件配置的fileName格式有關

4、以上的是文件的記錄方式,下面我們來看數據庫的記錄方式

<?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">

  <!-- 
  See https://github.com/nlog/nlog/wiki/Configuration-file 
  for information on customizing logging rules and outputs.
   -->
  <!-- 定義變量
  projectName 項目名稱
  logDirectory 文件路徑
  -->
  <variable name="projectName" value="test"/>

  <variable name="logDirectory" value="F:/nlog/${projectName}/${shortdate}"/>
  <targets>
    <!-- 定義輸出到MySQL中:
        type="database":這個記錄方式是數據庫
        dbProvider="MySql.Data.MySqlClient":使用MySQL的連接方式
        connectionString="":數據庫的連接字符串
        commandText="insert into Logs(CreateDate,LogLevel,CallSite,Massage,StackTrace) values (@CreateDate,@LogLevel,@CallSite,@Massage,@StackTrace)":insert語句    
    <target xsi:type="Database" name="logdatabase" dbProvider="MySql.Data.MySqlClient"
                    connectionString="Server=127.0.0.1;Database=mytestdatabase;Uid=root;Pwd=123;"
                    commandText="insert into Logs(create_time,loglevel,callsite,massage,stacktrace) values (@create_time,@loglevel,@callsite,@massage,@stacktrace)">
    <!-- 對應到insert語句的參數的值-->
      <parameter name="create_time" layout="${longdate}" />
      <parameter name="loglevel" layout="${level}" />
      <parameter name="callsite" layout="${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}" />
      <parameter name="massage" layout="${message}" />
      <parameter name="stacktrace" layout="${stacktrace}" />
    </target>
  </targets>
  <rules>
    <!-- 定義輸出日志:
        name="*":記錄所有信息
        minlevel="Trace":記錄的最低錯誤級別為Trace
        writeTo="logdatabase":日志寫入數據庫logdatabase中-->
    <logger name="*" minlevel="Trace" writeTo="logdatabase" />
  </rules>
</nlog>

sql語句

CREATE TABLE `mytestdatabase`.`Logs` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `create_time` DATETIME NOT NULL,
  `loglevel` VARCHAR(5) NOT NULL,
  `callsite` VARCHAR(5000) DEFAULT NULL,
  `massage` LONGTEXT,
  `stacktrace` VARCHAR(5000) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

控制台程序還是上面的代碼直接F5運行

數據庫表中的數據

當然<targets>下面可以包含很多個target 我們也可以把日志文件同時寫到文件和數據庫表中

<?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">

  <!-- 
  See https://github.com/nlog/nlog/wiki/Configuration-file 
  for information on customizing logging rules and outputs.
   -->
  <!-- 定義變量
  projectName 項目名稱
  logDirectory 文件路徑
  -->
  <variable name="projectName" value="test"/>

  <variable name="logDirectory" value="F:/nlog/${projectName}/${shortdate}"/>
  <targets>
    <target xsi:type="File" name="logfiles" fileName="${logDirectory}/${shortdate}.log" layout="${longdate} ${level} ${message} ${stacktrace} ${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}" />
    <target xsi:type="Database" name="logdatabase" dbProvider="MySql.Data.MySqlClient"
                    connectionString="Server=127.0.0.1;Database=mytestdatabase;Uid=root;Pwd=123;"
                    commandText="insert into Logs(create_time,loglevel,callsite,massage,stacktrace) values (@create_time,@loglevel,@callsite,@massage,@stacktrace)">
      <parameter name="create_time" layout="${longdate}" />
      <parameter name="loglevel" layout="${level}" />
      <parameter name="callsite" layout="${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}" />
      <parameter name="massage" layout="${message}" />
      <parameter name="stacktrace" layout="${stacktrace}" />
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="logfiles,logdatabase" />
  </rules>
</nlog>

這里只是nlog日常簡單的應用,更加詳細的應用請參考

NLog Doc http://www.nlog-project.org/

 


免責聲明!

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



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