1. 程式人生 > 實用技巧 >asp.net core 5.0 使用log4net

asp.net core 5.0 使用log4net

之前我在.net core 2.1的時候使用的是Huanent.Logging。考慮未來升級嘗試使用Log4net.下面是我的配置步驟:

1、網上下載一個log4net配置檔案.因為這種沒有技術含量需要時間的工作就直接copy就好了.在web目錄下建立一個config資料夾

<?xml version="1.0"?>
<log4net>
  <root>
    <level value="DEBUG"/>
    <appender-ref ref="SysAppender"/>
    <appender-ref ref="consoleApp
"/> </root> <!--資訊日誌配置--> <appender name="SysAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Logs\\" /> <param name="AppendToFile" value="true" /> <param name="MaximumFileSize" value="20MB" /> <param name="MaxSizeRollBackups
" value="100" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="\\yyyyMM\\yyyyMMdd".log"" /> <param name="RollingStyle" value="Composite" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="
%n -------------------------------------------------------------------------------------- %n日誌時間:%d [%t] %n日誌級別:%-5p %n日 志 類:%c [%x] %n%m %n" /> <param name="Header" value=" ====================================================================================== " /> </layout> </appender> <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net"> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <logger name="WebLogger"> <level value="DEBUG"/> </logger> </log4net>

2、使用nuget 引入log4net 。我是2.0.8

3、編寫Log4netHelper

using log4net;
using log4net.Repository;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Text;

namespace NF.Common.Utility
{
    /// <summary>
    /// 日誌等級
    /// </summary>
    public enum LogLevel
    {
        Error,
        Debug,
        Warning,
        Info
    }
    /// <summary>
    /// 單例模式初始化
    /// </summary>
    public class Singleton
    {
        private ILog Log;
        private static Singleton instance;
        private Singleton() { }
        public static Singleton getInstance()
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
        /// <summary>
        /// 獲取日誌初始化器
        /// </summary>
        /// <param name="type">類名 方法名</param>
        /// <returns></returns>
        public ILog Init(string type)
        {
            Log = LogManager.GetLogger(Log4netHelper.Repository.Name, type);
            return Log;
        }
    }
    /// <summary>
    /// 日誌操作類
    /// </summary>
    public class Log4netHelper
    {
        /// <summary>
        /// log4net 倉儲
        /// </summary>
        public static ILoggerRepository Repository { get; set; }
        /// <summary>
        /// 輸出Erro日誌
        /// </summary>
        /// <param name="message">日誌內容</param>
        public static void Error(string message)
        {
            StackTrace trace = new StackTrace();
            //獲取是哪個類來呼叫的  
            var className = trace.GetFrame(1).GetMethod().DeclaringType;
            //獲取方法名稱
            MethodBase method = trace.GetFrame(1).GetMethod();
            var type = "類名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name;
            WriteLog(LogLevel.Error, message, type);
        }
        /// <summary>
        /// 輸出Warning日誌
        /// </summary>
        /// <param name="message">日誌內容</param>
        public static void Warning(string message)
        {
            StackTrace trace = new StackTrace();
            //獲取是哪個類來呼叫的  
            var className = trace.GetFrame(1).GetMethod().DeclaringType;
            //獲取方法名稱
            MethodBase method = trace.GetFrame(1).GetMethod();
            var type = "類名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name;
            //記錄日誌
            WriteLog(LogLevel.Warning, message, type);
        }
        /// <summary>
        /// 輸出Info日誌
        /// </summary>
        /// <param name="message">日誌內容</param>
        public static void Info(string message)
        {
            StackTrace trace = new StackTrace();
            //獲取是哪個類來呼叫的  
            var className = trace.GetFrame(1).GetMethod().DeclaringType;
            //獲取方法名稱
            MethodBase method = trace.GetFrame(1).GetMethod();
            var type = "類名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name;
            //記錄日誌
            WriteLog(LogLevel.Info, message, type);
        }
        /// <summary>
        /// 輸出Debug日誌
        /// </summary>
        /// <param name="message">日誌內容</param>
        public static void Debug(string message)
        {
            StackTrace trace = new StackTrace();
            //獲取是哪個類來呼叫的  
            var className = trace.GetFrame(1).GetMethod().DeclaringType;
            //獲取方法名稱
            MethodBase method = trace.GetFrame(1).GetMethod();
            var type = "類名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name;
            //記錄日誌
            WriteLog(LogLevel.Debug, message, type);
        }
        /// <summary>
        /// 寫日誌
        /// </summary>
        /// <param name="logLevel">日誌等級</param>
        /// <param name="message">日誌資訊</param>
        /// <param name="type">類名 方法名</param>
        private static void WriteLog(LogLevel logLevel, string message, string type)
        {
            ILog Log = Singleton.getInstance().Init(type);
            switch (logLevel)
            {
                case LogLevel.Debug:
                    Log.Debug(message);
                    break;
                case LogLevel.Error:
                    Log.Error(message);
                    break;
                case LogLevel.Info:
                    Log.Info(message);
                    break;
                case LogLevel.Warning:
                    Log.Warn(message);
                    break;
            }

        }
    }
}

4、修改Startup 在ConfigureServices(IServiceCollection services)方法里加入如下程式碼:

Log4netHelper.Repository = LogManager.CreateRepository("NETCoreRepository");
            XmlConfigurator.Configure(Log4netHelper.Repository, new FileInfo(Environment.CurrentDirectory + "/Config/log4net.config"));

5、測試完成。