asp.net core 3.1 使用log4net


1.引用Log4net到項目中,搜NuGet包  Log4net 現在最新是 Version 2.0.8

2.在項目中添加log4net.config文件,右鍵改文件屬性-》復制到輸出目錄選擇-》始終復制

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="DebugAppender" type="log4net.Appender.DebugAppender" >
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <!--指定日記記錄方式,以滾動文件的方式(文件記錄)-->
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <!--日志路徑-->
    <file value="Log/" />
    <!--是否是向文件中追加日志-->
    <appendToFile value="true" />
    <!--log保留天數-->
    <param name= "MaxSizeRollBackups" value= "10"/>
    <!--每個文件最大1M-->
    <param name="maximumFileSize" value="1MB" />
    <!--日志根據日期滾動-->
    <param name="RollingStyle" value="Date" />
    <!--日志文件名格式為:logs_20080831.log-->
    <param name="DatePattern" value="&quot;logs_&quot;yyyyMMdd&quot;.log&quot;" />
    <!--日志文件名是否是固定不變的-->
    <param name="StaticLogFileName" value="false" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
    </layout>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="DebugAppender" />
    <appender-ref ref="RollingFile" />
  </root>
</log4net>

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"));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM