Logo

.NET6中使用Log4net记录日志

photo

2024年06月25日

1、引用NuGet

 2、创建logHelper类

using log4net.Repository;
using log4net;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp_Log4net
{
    public class Log4NetHelper
    {
        /// <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;
                }

            }
        }
    }
}

View Code

3、创建log4net.config配置文件》注意:需右键,属性,复制输出目录设置为(如果较新则复制)

<?xml version=”1.0″ encoding=”utf-8″ ?>
<log4net>
  <!–根配置–>
  <root>
    <!–日志级别:可选值: ERROR > WARN > INFO > DEBUG –>
    <level value=”ERROR”/>
    <level value=”WARN”/>
    <level value=”INFO”/>
    <level value=”DEBUG”/>
    <appender-ref ref=”ErrorLog” />
    <appender-ref ref=”WarnLog” />
    <appender-ref ref=”InfoLog” />
    <appender-ref ref=”DebugLog” />
  </root>
  <!– 错误 Error.log–>
  <appender name=”ErrorLog” type=”log4net.Appender.RollingFileAppender”>
    <!–目录路径,可以是相对路径或绝对路径–>
    <param name=”File” value=”log”/>
    <!–文件名,按日期生成文件夹–>
    <param name=”DatePattern” value=”/yyyy-MM-dd/&quot;Error.log&quot;”/>
    <!–追加到文件–>
    <appendToFile value=”true”/>
    <!–创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]–>
    <rollingStyle value=”Composite”/>
    <!–写到一个文件–>
    <staticLogFileName value=”false”/>
    <!–单个文件大小。单位:KB|MB|GB–>
    <maximumFileSize value=”200MB”/>
    <!–最多保留的文件数,设为”-1″则不限–>
    <maxSizeRollBackups value=”-1″/>
    <!–日志输出格式//行号影响性能??–>
    <layout type=”log4net.Layout.PatternLayout”>
      <conversionPattern value=”%n=====================================================================================================
                                %n[日志级别]%-5level
                                %n[记录时间]%date
                                %n[执行时间]%r
                                %n[线程]%t
                                %n[文件]%F
                                %n[行号]%L
                                %n[类名]%logger
                                %n[描述]%message
                                %n[详情]%exception”/>
    </layout>
    <filter type=”log4net.Filter.LevelRangeFilter”>
      <param name=”LevelMin” value=”ERROR” />
      <param name=”LevelMax” value=”ERROR” />
    </filter>
  </appender>

  <!– 警告 Warn.log–>
  <appender name=”WarnLog” type=”log4net.Appender.RollingFileAppender”>
    <!–目录路径,可以是相对路径或绝对路径–>
    <param name=”File” value=”log”/>
    <!–文件名,按日期生成文件夹–>
    <param name=”DatePattern” value=”/yyyy-MM-dd/&quot;Warn.log&quot;”/>
    <!–追加到文件–>
    <appendToFile value=”true”/>
    <!–创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]–>
    <rollingStyle value=”Composite”/>
    <!–写到一个文件–>
    <staticLogFileName value=”false”/>
    <!–单个文件大小。单位:KB|MB|GB–>
    <maximumFileSize value=”200MB”/>
    <!–最多保留的文件数,设为”-1″则不限–>
    <maxSizeRollBackups value=”-1″/>
    <!–日志格式–>
    <layout type=”log4net.Layout.PatternLayout”>
      <conversionPattern value=”%n=====================================================================================================
                                %n[日志级别]%-5level
                                %n[记录时间]%date
                                %n[执行时间]%r
                                %n[线程]%t
                                %n[文件]%F
                                %n[行号]%L
                                %n[类名]%logger
                                %n[描述]%message
                                %n[详情]%exception”/>
    </layout>
    <filter type=”log4net.Filter.LevelRangeFilter”>
      <param name=”LevelMin” value=”WARN” />
      <param name=”LevelMax” value=”WARN” />
    </filter>
  </appender>

  <!– 信息 Info.log–>
  <appender name=”InfoLog” type=”log4net.Appender.RollingFileAppender”>
    <!–目录路径,可以是相对路径或绝对路径–>
    <param name=”File” value=”log”/>
    <!–文件名,按日期生成文件夹–>
    <param name=”DatePattern” value=”/yyyy-MM-dd/&quot;Info.log&quot;”/>
    <!–追加到文件–>
    <appendToFile value=”true”/>
    <!–创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]–>
    <rollingStyle value=”Composite”/>
    <!–写到一个文件–>
    <staticLogFileName value=”false”/>
    <!–单个文件大小。单位:KB|MB|GB–>
    <maximumFileSize value=”200MB”/>
    <!–最多保留的文件数,设为”-1″则不限–>
    <maxSizeRollBackups value=”-1″/>
    <!–日志格式–>
    <layout type=”log4net.Layout.PatternLayout”>
      <conversionPattern value=”%n=====================================================================================================
                                %n[日志级别]%-5level
                                %n[记录时间]%date
                                %n[执行时间]%r
                                %n[线程]%t
                                %n[文件]%F
                                %n[行号]%L
                                %n[类名]%logger
                                %n[描述]%message
                                %n[详情]%exception”/>
    </layout>
    <filter type=”log4net.Filter.LevelRangeFilter”>
      <param name=”LevelMin” value=”INFO” />
      <param name=”LevelMax” value=”INFO” />
    </filter>
  </appender>

  <!– 调试 Debug.log–>
  <appender name=”DebugLog” type=”log4net.Appender.RollingFileAppender”>
    <!–目录路径,可以是相对路径或绝对路径–>
    <param name=”File” value=”log”/>
    <!–文件名,按日期生成文件夹–>
    <param name=”DatePattern” value=”/yyyy-MM-dd/&quot;Debug.log&quot;”/>
    <!–追加到文件–>
    <appendToFile value=”true”/>
    <!–创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]–>
    <rollingStyle value=”Composite”/>
    <!–写到一个文件–>
    <staticLogFileName value=”false”/>
    <!–单个文件大小。单位:KB|MB|GB–>
    <maximumFileSize value=”200MB”/>
    <!–最多保留的文件数,设为”-1″则不限–>
    <maxSizeRollBackups value=”-1″/>
    <!–日志格式–>
    <layout type=”log4net.Layout.PatternLayout”>
      <conversionPattern value=”%n=====================================================================================================
                                %n[日志级别]%-5level
                                %n[记录时间]%date
                                %n[执行时间]%r
                                %n[线程]%t
                                %n[文件]%F
                                %n[行号]%L
                                %n[类名]%logger
                                %n[描述]%message
                                %n[详情]%exception”/>
    </layout>
    <filter type=”log4net.Filter.LevelRangeFilter”>
      <param name=”LevelMin” value=”DEBUG” />
      <param name=”LevelMax” value=”DEBUG” />
    </filter>
  </appender>

</log4net>

4、注入(在主程序入口,或Main方法中)

//将log4net在项目中启用日志文件注册
Log4netHelper.Repository = LogManager.CreateRepository("NETCoreRepository");
XmlConfigurator.Configure(Log4netHelper.Repository, new FileInfo(System.AppDomain.CurrentDomain.BaseDirectory + "/log4net.config"));

 5、使用

   Log4netHelper.Info("接口被调用:");
   Log4netHelper.Error("接口被调用:");
   Log4netHelper.Warning("接口被调用:");
   Log4netHelper.Debug("接口被调用:");

 6、实现效果

 

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它
所有附件
该文章没有附件.
本文为原创文章,请注意保留出处!

留言板

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

热门文章

Windows Server IIS+ARR反向代理(配置反向代理服务器) 1.概念说明:反向代理反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相...WindowsServerIIS+ARR反向代理(配置反向代理服务器) 作者:Pastore Antonio
1581 浏览量
ffmpeg 生成水印 1:先要配置ffmpeg的滤镜:参考:https://www.jianshu.com/p/9d24...ffmpeg生成水印 作者:Pastore Antonio
1508 浏览量
C#中List的FindAll方法的正确打开方式 初略的介绍一种常见的List写法,这种写法在3.0以后其实是很简单的,但是在2.0左右的系统运用中还...C#中List的FindAll方法的正确打开方式 作者:Pastore Antonio
1467 浏览量
IntelliJ IDEA 代码字体大小的快捷键设置放大缩小(很实用)(图文详解) 这是在设置IntelliJIDEA...IntelliJIDEA代码字体大小的快捷键设置放大缩小(很实用)(图文详解) 作者:Pastore Antonio
1461 浏览量
Navicat Premium 12.0.22 安装与破解 一、安装  NavicatPremium12.0.22的下载链接:https://pan.ba...NavicatPremium12.0.22安装与破解 作者:Pastore Antonio
1447 浏览量