NLog用法

NLog是什麼html

NLog是一個基於.NET平臺編寫的類庫,咱們可使用NLog在應用程序中添加極爲完善的跟蹤調試代碼。
NLog是一個簡單靈活的.NET日誌記錄類庫。經過使用NLog,咱們能夠在任何一種.NET語言中輸出帶有上下文的(contextual information)調試診斷信息,根據喜愛配置其表現樣式以後發送到一個或多個輸出目標(target)中。
NLog的API很是相似於log4net,且配置方式很是簡單。NLog使用路由表(routing table)進行配置,這樣就讓NLog的配置文件很是容易閱讀,並便於從此維護。
NLog聽從BSD license,即容許商業應用且徹底開放源代碼。任何人均可以避免費使用並對其進行測試,而後經過郵件列表反饋問題以及建議。
NLog支持.NET、C/C++以及COM interop API,所以咱們的程序、組件、包括用C++/COM 編寫的遺留模塊均可以經過同一個路由引擎將信息發送至NLog中。
簡單來講Nlog就是用來記錄項目日誌的組件

git

NLog日誌輸出目標github

文件 好比TXT、Excel
文本控制檯
Email
數據庫
網絡中的其它計算機(經過TCP或UDP)
基於MSMQ的消息隊列
Windows系統日誌web

NLog使用數據庫

  直接用NuGet安裝就好了安全

 簡單的Demo服務器

複製代碼
<?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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" 
      internalLogFile="c:\temp\nlog-internal.log">
  <variable name="myvar" value="myvalue"/>
  <targets>
    <target xsi:type="File" name="SimpleDemoFile" fileName="../../../Logs/SimpleDemo.txt" layout="${message}" encoding="UTF-8"/>
  </targets>
  <rules>
    <logger name="SimpleDemo" level="Error" writeTo="SimpleDemoFile"/>
  </rules>
</nlog>
複製代碼
複製代碼
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2017011301SimpleDemo
{
    class Program
    {
      public static Logger logger = LogManager.GetLogger("SimpleDemo");
        static void Main(string[] args)
        {
            Console.WriteLine("執行開始");
            logger.Error("Hello World");
            Console.WriteLine("執行結束");
            Console.ReadKey();
        }
    }
}
複製代碼

輸出到  ../../../Logs/SimpleDemo.txt 內容爲 Hello World網絡

 

NLog配置async

<?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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off「
internalLogFile="c:\temp\nlog-internal.log">
<variable name="myvar" value="myvalue"/>
<targets> </targets>
<rules> </rules>
</nlog>ide

xmlns=「http://www.nlog-project.org/schemas/NLog.xsd」 這表示默認命名空間
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 這個命名空間裏面的元素或者屬性就必需要以xsi:這種方式來寫
好比schemaLocation就是他的一個屬性,因此寫成xsi:schemaLocation
而默認命名空間不帶相似xsi這種,其實xml標籤名稱有個專業叫法叫作QName,而若是沒有前面的xsi:這種通常叫作NCName
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
表示把定義這個命名空間的schema文件給引用進來,好讓開發類型工具可以解析和驗證你的xml文件是否符合語法規範
等同於

簡單來講 上面是用來驗證你XML格式是否正確的。

InternalLogFile="c:\log\nlog.txt" //NLog內部日誌文件位置 
internalLogLevel="Debug" //日誌級別 
autoReload:一旦啓動程序,這時候NLog.config文件被讀取後,知道程序再啓動都不會再讀取配置文件了。假如咱們不想停掉程序,好比說服務器哪能說停就停哈。這就用上這個配置了,這個配置功能是,一旦你對配置文件修改,程序將會從新讀取配置文件,也就是自動再配置。

throwExceptions//NLog日誌系統拋出異常
internalLogFile="c:\log\nlog.txt" //NLog內部日誌文件位置 
internalLogLevel="Debug" //日誌級別 

<variable /> - 定義配置文件中用到的變量
<targets /> - 定義日誌的目標/輸出
<rules /> - 定義日誌的路由規則

 

Layout佈局

幾種常見的
${var:basePath} basePath是前面自定義的變量
${longdate} 日期格式 2017-01-17 16:58:03.8667
${shortdate}日期格式 2017-01-17 
${date:yyyyMMddHHmmssFFF} 日期 20170117165803866
${message} 輸出內容
${guid} guid
${level}日誌記錄的等級
${logger} 配置的logger

NLog記錄等級

Trace - 最多見的記錄信息,通常用於普通輸出
Debug - 一樣是記錄信息,不過出現的頻率要比Trace少一些,通常用來調試程序
Info - 信息類型的消息
Warn - 警告信息,通常用於比較重要的場合
Error - 錯誤信息
Fatal - 致命異常信息。通常來說,發生致命異常以後程序將沒法繼續執行。
自上而下,等級遞增。

NLog等級使用

指定特定等級 如:level="Warn" 
指定多個等級 如:levels=「Warn,Debug「 以逗號隔開
指定等級範圍 如:minlevel="Warn" maxlevel="Error"

 

Logger使用

從配置文件讀取信息並初始化 兩種經常使用的方式

根據配置的路由名獲生成特定的logger Logger logger = LogManager.GetLogger("LoggerDemo");

初始化爲當前命名空間下當前類的logger  Logger logger = LogManager.GetCurrentClassLogger();

區別是logger的name不同 前者是LoggerDemo,後者是當前命名空間+點+當前類名 如類比較多,而且往同一個日誌文件記錄,建議用GetCurrentClassLogger

 

Logger有如下三種經常使用的寫入方式

logger.Error("這是DatabaseDemo的錯誤信息");
logger.Error(「ContentDemo {0}:{1}」,「時間」,DateTime.Now.ToString());須要拼接字符串的話推薦這種,NLog作了延遲處理,用的時候才拼接。
logger.Log(LogLevel.Error, "這是ContentDemo");

Logger發郵件參數

smtpServer=「*****」 郵件服務器 例如126郵箱是smtp.126.com
smtpPort=「25「端口
smtpAuthentication=「Basic「 身份驗證方式 基本
smtpUserName=「*****「 郵件服務器用戶名
smtpPassword=「******」郵件服務器密碼
enableSsl=「false」是否使用安全鏈接 須要服務器支持
addNewLines=「true」 開頭與結尾是否換行
from=「****」 發件郵箱
to=「XXXX@XX.com,XXXXX@XX.com」收件郵箱 多個以逗號分隔
subject=「subject:${machinename}報錯「 郵件主題
header=「---------------------開頭-------------------------「 郵件開頭
body=「${newline}${message}${newline}「 郵件內容
footer=「---------------------結尾-------------------------「 郵件結尾

複製代碼
<?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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Off"
      internalLogFile="c:\temp\nlog-internal.log">

  <!-- optional, add some variables
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->
  <variable name="basePath" value="C:\Users\Zachary\Desktop\練習\20170113NLog\Logs\"/>

  <targets>
    <target xsi:type="Mail"
            name="SendMail"
            smtpServer="你的郵件服務器"
            smtpPort="你的郵件服務器端口"
            smtpAuthentication="Basic"
            smtpUserName="你的郵件服務器名"
            smtpPassword="你的郵件服務器密碼"
            enableSsl="false"
            addNewLines="false"
            from="你的發件郵箱"
            to="你的收件郵箱"
            subject="subject:${machinename}報錯"
            header="---------------------開頭-------------------------"
            body="${newline}${message}${newline}"
            footer="---------------------結尾-------------------------"
            encoding="UTF-8"/>
  </targets>

  <rules>
    <logger name="*" level="Error"  writeTo="SendMail"></logger>
  </rules>
</nlog>
複製代碼

 

 

Logger寫入數據庫參數

<target xsi:type="Database"
name="DatabaseFile"
dbProvider=「System.Data.SqlClient」數據庫類型
commandText=「Insert into ErrorLog(ID, Content, CreateTime) Values(@id, @content, @createTime);」插入操做
connectionString=「data source=.;initial catalog=NLog;user id=sa;password=******;」> 數據庫鏈接字符串 跟咱們webcofig中的同樣
<parameter name=「@id」 layout=「${guid}」 /> 參數
<parameter name="@content" layout="${message}" />
<parameter name="@createTime" layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff} " />
</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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Off"
      internalLogFile="../../../Logs/nlog-internal.log">

  <targets>
    <target xsi:type="Database"
            name="DatabaseFile"
            dbProvider="System.Data.SqlClient"
            commandText="Insert into ErrorLog(ID, Content, CreateTime) Values(@id, @content, @createTime);"
            connectionString="data source=.;initial catalog=NLog;user id=sa;password=你的數據庫密碼;">
    <parameter name="@id" layout="${guid}" />
    <parameter name="@content" layout="${message}" />
    <parameter name="@createTime" layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff} " />
    </target>
  </targets>
  <rules>
    <logger name="Database" level="Error" writeTo="DatabaseFile"/>
  </rules>
</nlog>
複製代碼

NLog.config能夠單獨放,也能夠放在WebConfig裏。

在configuration配置

<configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
而後把NLog.config裏面放在後面就好了。
複製代碼
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Off"
      internalLogFile="c:\temp\nlog-internal.log">
    <variable name="myvar" value="myvalue"/>
    <targets async="false">
      <target xsi:type="File" name="WebDemoFile" fileName="C:\Users\Zachary\Desktop\練習\20170113NLog\Logs\${date:yyyyMMddHHmm}WebDemo.txt" layout="${longdate} ${message}" encoding="UTF-8"/>
    </targets>
    <rules>
      <logger name="WebDemo" level="Error" writeTo="WebDemoFile"/>
    </rules>
  </nlog>
</configuration>
複製代碼

 

 附demo+PPT介紹:http://download.csdn.net/detail/fcydxbd/9740809

 

原文連接:http://www.javashuo.com/article/p-fstzjrmf-my.html

相關文章
相關標籤/搜索