1. 程式人生 > >log4donet 的 一篇簡單使用實例

log4donet 的 一篇簡單使用實例

bin console blank end 關於 tor 壓縮包 hex adk

背景

最近在寫一個Adapter,需要調用別的程序的DLL. Adapter使用的是C#還有.net的等方面的技術。今天在寫log這塊,就像嘗試一下有沒有“輪子”可以試試的。在網上搜羅了一番之後,決定就使用“log4net”吧。

關於log4net

簡單來說,她是從log4j衍生出來的專門用於.net領域的一個寫log的類庫。支持 .net stardard,.net core等等。。。

下載

我們可以到 http://logging.apache.org/log4net/download_log4net.cgi 來下載,下載頁面提供了很多種方式(binary or source)

使用

LZ這裏是.net stardard,所以將下載完成後的壓縮包解壓,之後進入bin目錄,找到對應的framework版本,選擇引入“log4net.dll”

技術分享

個人的想法是把這個記錄log的組件封裝成一個library,所以新建一個ClassLibrary工程,在裏面引入“log4net.dll”並且進行封裝。項目組成如下圖:

技術分享

其中:

- LogHelper 是一個關於調用Log4net.dll方法的封裝類。

- LogLirary.config 該文件是一個配置文件,裏面詳細記錄的log的輸出/存儲方式

LogHelper.cs

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

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "LogLibrary.config", ConfigFileExtension = ".config", Watch = true)]
namespace LogLibary
{

    public enum LogLevel
    {
        Debug,
        Info,
        Warning,
        Error
    }

    
public class LogHelper { public static void WriteLog(Type t, LogLevel logLevel, string msg) { log4net.ILog log = log4net.LogManager.GetLogger(t); switch (logLevel) { case LogLevel.Debug: log.Debug(msg); break; case LogLevel.Info: log.Info(msg); break; case LogLevel.Warning: log.Warn(msg); break; case LogLevel.Error: log.Error(msg); break; default: log.Debug(msg); break; } } public static void WriteLogWithException(Type t, LogLevel logLevel, string msg, Exception ex) { log4net.ILog log = log4net.LogManager.GetLogger(t); switch (logLevel) { case LogLevel.Debug: log.Debug(msg, ex); break; case LogLevel.Info: log.Info(msg, ex); break; case LogLevel.Warning: log.Warn(msg, ex); break; case LogLevel.Error: log.Error(msg, ex); break; default: log.Debug(msg, ex); break; } } } }
標紅的語句非常重要,它表明我們log輸出依賴於configuration

LogLibrary.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <!--定義輸出到文件中-->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--定義文件存放位置-->
      <file value="Log\\"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date"/>
      <datePattern value="yyyy\\yyyyMM\\yyyyMMdd‘.txt‘"/>
      <staticLogFileName value="false"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--每條日誌末尾的文字說明-->
        <!--輸出格式-->
        <!--樣例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="%newline %n記錄時間:%date %n線程ID:[%thread] %n日誌級別:  %-5level %n出錯類:%logger property: [%property{NDC}] - %n錯誤描述:%message%newline %n"/>
      </layout>
    </appender>
    <!--定義輸出到控制臺命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <!--文件形式記錄日誌-->
      <appender-ref ref="RollingLogFileAppender" />
      <!--控制臺控制顯示日誌-->
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
</configuration>

最後,寫一個簡單的測試類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RabbitMQ.Client;
using LogLibary;

namespace Producer
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 1000; i++) // tested code here
            {
              string message = String.Format("Hello there! number is: {0}", i.ToString());               
               LogHelper.WriteLog(typeof(Program), LogLevel.Debug, string.Format(" set {0}", message));
            }
                   
            LogHelper.WriteLog(typeof(Program), LogLevel.Info, "1000 tasks sent out!!");          

            Console.ReadKey();
        }
    }
}

參考文獻:

http://logging.apache.org/log4net/release/config-examples.html

http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html

OK. 啰啰嗦嗦寫了一堆,感謝大家的收看,預祝各位雙11 “買買買!!”

log4donet 的 一篇簡單使用實例