1. 程式人生 > >C#第三方日誌庫Nlog

C#第三方日誌庫Nlog

C#第三方庫Nlog

Kagula

2012-03-31

內容簡介

    本文記錄C#的NLog庫(日誌庫)的常用方式。所有程式碼在WinXPSP3+VS2010SP1環境中測試通過。

    使用的第三方庫是Sentinel 0.9.2.0,NLog-v2.0.0.2000

    如果是在Silverlight專案中使用NLog請參考資料[4]。

正文

第一次使用

在參考資料[2]中找到download下載Nlog安裝包,在系統中安裝。

新建C#的Win32Console專案,滑鼠右鍵單擊專案名稱,新增新專案[Visual C# Items]->[CSharp]->[Empty Nlog configuration file]

,預設名稱為“Nlog.config”的檔案。你可以在專案中使用快捷鍵[Ctrl]+[Shift]+[A]新增“Nlog.config”檔案,同時Nlog.DLL檔案也會被加入到專案中去。

下面在Program.cs中填入預設程式碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NLog;

namespace testNLog
{
    class Program
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();

        public static void MyMethod1()
        {
            int k = 42;
            int l = 100;

            logger.Trace("Sample trace message, k={0}, l={1}", k, l);
            logger.Debug("Sample debug message, k={0}, l={1}", k, l);
            logger.Info("Sample informational message, k={0}, l={1}", k, l);
            logger.Warn("Sample warning message, k={0}, l={1}", k, l);
            logger.Error("Sample error message, k={0}, l={1}", k, l);
            logger.Fatal("Sample fatal error message, k={0}, l={1}", k, l);
            logger.Log(LogLevel.Info, "Sample fatal error message, k={0}, l={1}", k, l);
        }

        static void Main(string[] args)
        {
            logger.Info("---------------------------------------");
            logger.Trace("Sample trace message");
            logger.Debug("Sample debug message");
            logger.Info("Sample informational message");
            logger.Warn("Sample warning message");
            logger.Error("Sample error message");
            logger.Fatal("Sample fatal error message");

            // alternatively you can call the Log() method 
            // and pass log level as the parameter.
            logger.Log(LogLevel.Info, "Sample fatal error message");

            MyMethod1();
        }
    }
}

下面在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">

  <!-- make sure to set 'Copy To Output Directory' option for this file -->
  <!-- go to http://nlog-project.org/wiki/Configuration_file for more information -->

  <targets>
    <target name="asyncFile" xsi:type="AsyncWrapper">
      <target name="logfile" xsi:type="File" fileName="file.txt" />
    </target>
    <target name="console" xsi:type="ColoredConsole" 
             layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${message} ${exception}"/>
  </targets>

  <rules>
    <logger name="*" minlevel="Info" writeTo="logfile" />
    <logger name="*" minlevel="Trace" writeTo="console" />
  </rules>
</nlog>

上面這個例子演示了,日誌資訊如何輸出到控制檯和檔案中。檔案中的Target標籤對有個巢狀,最外層是個“AsyncWrapper”型別的Target標籤對,使資訊以非同步方式輸出到日誌檔案。

新增的NLog.config檔案必須放在專案對應的DEBUG目錄或RELEASE目錄中即必須放在和可執行檔案相同的路徑中

Logger標籤對,控制輸出範圍與水平

name屬性:

指定哪些程式碼段要輸出資訊,例如:“<logger name="SomeNamespace.Component.*" …”,只輸出SomeNamespace.Component域裡面列印的資訊。

minLevel屬性:

    指定輸出等級,Logging 水平分為以下等級“Trace<<Debug<<Info<<Warn<<Error<<Fatal ”,如果我們選擇Info值,則Trace和Debug等級的資訊不會被輸出。

writeTo屬性:

       指定使用那個“Target標籤對”來輸出資訊

Final屬性:

       這個屬性若設定為true,則被當前Logger標籤對輸出的訊息型別,不再被下一個Logger標籤對處理。例如:

   <rules>

       <logger name="SomeNamespace.Component.*"minlevel="Trace" writeTo="logfile" final="true"/>

       <logger name="*" minlevel="Info"writeTo="logfile2" />

</rules>

Target標籤對,輸出格式,輸出到哪裡

Name屬性:

target標籤對的名稱

Type屬性:

target的型別,比如target=”File”。還有“Database”,“Mail”,“Network”等型別。

Silverlight使用檔案輸出,需將專案設定為Out of browser模式

fileName屬性:

若target型別為File,則可以指定輸出檔名。

例:

fileName=”file.txt”,

fileName="${basedir}/App_Data/log.txt",

fileName="${basedir}/log.txt",

fileName ="${specialfolder:MyDocuments}/log.${shortdate}.txt"

fileName="${logger}.txt"

fileName="${shortdate}.txt"

fileName="${windows-identity:domain=false}.txt

fileName="${shortdate}/${windows-identity:domain=false}.txt"

如果是Silverlight專案可能不能指定輸出檔案到App_Data目錄下。

Layout屬性:

格式化輸出日誌資訊。例:

layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}"

layout="[${date:format=yyyy-MM-ddHH\:mm\:ss}][${level}] ${message} ${exception}"

layout="${longdate}${callsite} ${level} ${message}"

address屬性:

指定日誌資訊輸出到哪個網路伺服器,例:

<targetname="n1" xsi:type="Network"address="tcp://localhost:4001"/>

傳送除錯資訊到網路伺服器

參考資料[3]可以實現。但是需要注意以下問題:

[1]建議下載這個軟體的zip版本,解壓后里面有Sentinel.exe檔案,可以用下面的命令列啟動Sentinel,免得每次啟動,都要輸入一遍配置資訊。

sentinel   nlog  udp   9999” 

[2]如果改成TCP(參考資料[3]用的是UDP)方式,則sentinel收不到日誌資訊,不知是什麼原因。

參考資料

[1]《Nlog Tutorial》

[2]《Nlog 官網》

[3]《Sentinel官網》

 [4]《使用NLog為Silverlight增加日誌記錄功能》

相關推薦

C#第三方日誌Nlog

C#第三方庫Nlog Kagula 2012-03-31 內容簡介     本文記錄C#的NLog庫(日誌庫)的常用方式。所有程式碼在WinXPSP3+VS2010SP1環境中測試通過。     使用的第三方庫是Sentinel 0.9.2.0,NLog-v2.0.0.20

[置頂] C++開源日誌--Glog的使用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C++開源日誌選擇

每個系統都需要日誌記錄,通過日誌方便排錯除錯,管理執行時的異常。 而C++開源的日誌庫,待選的有 glog、log4cplus、log4cpp、log4cxx 目前準備使用glog,使用方便,效能也不錯,待進一步試驗,如果有不能滿足的功能就轉用 log4cplus,功能很

C++開源日誌Glog的使用(VS2010)

如需轉載請標明出處:http://blog.csdn.net/itas109  QQ技術交流群:129518033 平臺:windows 開發工具:VS2010 1、下載Glog 下載完成之後,用VS2010進行編譯,預設是vs2008讓其自動轉換,如圖所示。 編譯

C++:日誌log4cplus 2.0的使用說明

以前在做java開發時一直都在用log4j,它配置靈活,功能強大。如果C++中也存在類似配置的日誌庫,則可以省去不少學習的時間。在C++中的確有這樣的一些庫,本文就拿其中用的最多的log4cplus來講講如何使用它。 可以從以上兩個地址中下載最新的檔案,本文使用的最新版

第三方日誌logrus使用

第三方日誌庫logrus使用 日誌是程式中必不可少的一個環節,由於Go語言內建的日誌庫功能比較簡潔,我們在實際開發中通常會選擇使用第三方的日誌庫來進行開發。本文介紹了logrus這個日誌庫的基本使用。 logrus介紹 Logrus是Go(golang)的結構化logger,與標準庫logger完全API相容

c#的日誌插件NLog基本使用

nag async info 插件 sta pack hmm erro 完整 本文介紹c#的日誌插件NLog 安裝插件 創建logger 日誌級別 書寫日誌信息 配置 包裝器 布局 安裝插件 直接下載插件包 Install-Package NLog.Config 創建lo

不用第三方解碼取得圖片寬高 附完整C++算法實現代碼

== 實現 for break 特定 out printf chunk char* 在特定的應用場景下,有時候我們只是想獲取圖片的寬高, 但不想通過解碼圖片才取得這個信息。 預先知道圖片的寬高信息,進而提速圖片加載,預處理等相關操作以提升體驗。 在stackoverflow

c++ 高性能日誌(muduo_AsyncLogging)

c++ reset IT 實現思路 for ava void 協調 前端 實現一個高效的網絡日誌庫要解決那些問題? 首先明確一下問題的模型,這是一個典型的多生產者 單消費者問題,對於前端的日誌庫使用者來說,應該做到非阻塞添加,作為後端的文件寫入,應該註意磁盤IO的瓶頸。

C# log4net 日誌寫入到數據

寫入 enc gpu 效果 ring 級別 expand 反射 epo 效果圖: 1:第一步創建SQL表結構 CREATE TABLE [dbo].[LogDetails] ( [LogID] int NOT NULL IDENTITY(1,1) , [

python2.7安裝第三方擴充套件報Microsoft Visual C++9.0 required

環境:   作業系統:Windows 7 64位   語言:Python 2.7.9   Twisted   webrtcvad 等第三方擴充套件庫 安裝,執行如下命令: pip install Twisted/...

Masm(611) 呼叫 第三方c語言函式(彙編呼叫第三方c語言函式

一開始的程式碼: void print(){ printf("hello hairi"); } lib1的程式碼 include Lib1.lib data segment ;定義資料段 infon db 0dh,0ah,'Please input a year

C++第三方

Eigen: C++開源矩陣計算工具      https://blog.csdn.net/houjixin/article/details/8477522      http://eigen.tuxfamily.org/dox/group__QuickRefPage.html       &

JIN學習一、Android使用已有C/C++程式碼、第三方SO的方法

1.配置好NDk編譯環境(這個Google一下,:)) 2.將已有C/C++程式碼,編譯成SO檔案 3.Eclipse中新建Android工程,建立一個jni目錄。如下所示 4.在jni目錄建立C/C++檔案,裡面呼叫步驟2函式,或者第三方SO的函式 5.建立Androi

Android使用已有C/C++程式碼、第三方SO的方法(JIN學習)

1.配置好NDk編譯環境(這個Google一下,:)) 2.將已有C/C++程式碼,編譯成SO檔案 3.Eclipse中新建Android工程,建立一個jni目錄。如下所示 4.在jni目錄建立C/C++檔案,裡面呼叫步驟2函式,或者第三方SO的函式 5.建

在Linux上的使用開源C++日誌 ---log4cplus

1.簡 介     log4cplus是C++編寫的開源的日誌系統,前身是java編寫的log4j系統.受Apache Software License保護。作者是Tad E. Smith。     log4cplus具有執行緒安全、靈活、以及多粒度控制的特點,通過將資訊劃分優先順序使其可以面向程式除錯、

C# 通用日誌 log4net 公共類 (可擴充套件)

     之前如果搭建一個新專案,想要使用日誌就必須複製一套log4net的web.config的配置,複製都還好,關鍵當你複製完,發現並不能用,而且還不知道哪裡錯了。。。  最終忍無可忍,這個通用日誌類庫就誕生了。都說程式設計師是最懶惰的人,這句話是一點沒錯!!! 好了

C++第三方常用網路

(1)ACE龐大、複雜,適合大型專案。開源、免費,不依賴第三方庫,支援跨平臺。(2)AsioAsio基於Boost開發的非同步IO庫,封裝了Socket,簡化基於socket程式的開發。開源、免費,支援跨平臺。(3)POCOPOCO C++ Libraries 提供一套 C+

CMake 連結第三方 和 新增C++11的支援

這裡的例子, 是連結libev , 如下: 我的CMake 版本是3.10 # CMake 最低版本號要求 cmake_minimum_required (VERSION 2.8) # 專案資訊 project (server) # 查詢當前目錄下的所有原始檔 # 並將

C++日誌log4cplus:SocketAppender記錄日誌到log Server

1.問題 C++程式在後臺執行時,可通過log4cplus記錄日誌。當C++程式執行在遠端伺服器上時,我們就需要遠端登陸到該伺服器才能檢視日誌。進一步,如果該C++程式一個並行程式或者分散式程式,為了檢視程式的執行狀態,我們就需要登陸到N臺伺服器上,tail -f xx.