這裡按老規矩先進行和其它產品進行比較: 目前在.net平臺存在兩個比較老牌的日誌框架分別為Log4net和NLog。 我們進行對這兩種框架進行比較下 Log4net Log4net是一個老牌的日誌框架,它可以實現日誌多目標輸出,輸出到控制台、文件、資料庫、系統事件、Email等,幾乎無所不能。它可以... ...
這裡按老規矩先進行和其它產品進行比較:
目前在.net平臺存在兩個比較老牌的日誌框架分別為Log4net和NLog。
我們進行對這兩種框架進行比較下
Log4net
Log4net是一個老牌的日誌框架,它可以實現日誌多目標輸出,輸出到控制台、文件、資料庫、系統事件、Email等,幾乎無所不能。它可以通過配置讓日誌系統實時生效,比如說在服務運行的過程中修改配置改變輸出目標,改變日誌等級等,均不用重啟程式。存在的缺點就是配置繁瑣,基本上不查資料我是配置不出來的。
NLog
NLog是和Log4net差不多的日誌框架,屬於新興的日誌框架。我們從它們的支持和性能方面來比較下。
借鑒博客園大佬們測試的結果
我原先差點就信了,後來作者又在2017年9月1日發出以下內容。
以上性能測試不再有效,根據網友反饋,由於輸出內容的略有差異導致上面性能測試出現不公平的情況,log4Net在輸出時可能會有更多的計算量。在優化測試代碼情況下,僅讓日誌框架列印日誌內容,其餘的包括時間、日誌等級、日誌類名一律不列印,使用最新版Dll,兩個框架性能相差無幾。
畢竟是老牌子的日誌框架,居然還輸給新人啦。
但從更新速度來說,Nlog一直處於持續更新中,支持的也比較多。所以我們還是在這裡講下。
先用nuget 載入下NLog
載入後我們來看下項目裡面多了些神馬?
日誌的配置(摘抄)
通過在啟動的時候對一些常用目錄的掃描,NLog會嘗試使用找到的配置信息進行自動的自我配置。當你運行一個獨立的*.exe客戶端可執行程式時,NLog將在以下目錄搜索配置信息:
標準的程式配置文件(通常為 程式名.exe.config)
程式目錄下的程式名.exe.nlog文件
程式目錄下的NLog.config文件
NLog.dll所在目錄下的NLog.dll.nlog文件
如果定義了NLOG_GLOBAL_CONFIG_FILE環境變數,則該變數所指向的文件
如果是一個ASP.NET程式,被搜索的目錄包括:
標準的web程式配置文件web.config
和web.config在同一目錄下的web.nlog文件
程式目錄下的NLog.config文件
NLog.dll所在目錄下的NLog.dll.nlog文件
如果定義了NLOG_GLOBAL_CONFIG_FILE環境變數,則該變數所指向的文件
由於.NET Compact Framework不支持程式配置文件(*.exe.config)和環境變數,因此NLog將只會掃描這些地方:
程式目錄下的NLog.config文件
NLog.dll所在目錄下的NLog.dll.nlog文件
如果定義了NLOG_GLOBAL_CONFIG_FILE環境變數,則該變數所指向的文件
NLog配置文件NLog.config,通過上述內容我們可以知道NLog可以配置在web.config裡面或者獨立的NLog.config文件都是OK的。
Web.config
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
<nlog>
這部分就是NLog.config裡面內容
</nlog>
</configuration>
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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/>
<!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets>
<!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
-->
<!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
</targets>
<rules>
<!-- add your logging rules here -->
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
</rules>
</nlog>
我們對上述節點名稱進行解釋下:
- <targets>我們看下config裡面的描述可以知道是用來配置日誌目標/輸出
每個< targets >代表一個目標,且< targets >帶有兩個屬性分別為name和type.
- name - 目標的名稱
- type - 目標的類型 - 比如"File","Database","Mail"。如果你使用了名字空間,這個屬性會被命名為 xsi:type.
- <rules>看下描述,添加你的日誌路由規則,Debug,Info, Warn, Error and Fatal
- <variable> 配置變數賦值
- <include /> - 導入外部配置文件
這裡我就不詳細描述內容,因為官網已經說的很詳細了,並且有例子。
https://github.com/NLog/NLog/wiki