Logo

Logo

.NET6中使用Log4net记录日志

Xzavier Aaron
Xzavier Aaron 2024年06月25日
357 阅读 0 评论 约 19530 字 阅读约 40 分钟

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、实现效果

 

查看完整代码

橙子主题打折出售

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

购买它
部分文章可能存在转载,如果涉及到侵权,请联系删除文章。

留言板

发表回复

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

7 - 5 = ?

探索AIGC相关的精彩内容,共 15 篇文章

Azure AI 服务之语音识别

简介 Azure AI 服务中的语音识别 API 是微软提供的一项先进技术,旨在帮助开发者轻松实现语 ... .NET6中使用Log4net记录日志

2026-02-17 · Xzavier Aaron
MCP | 一文详解什么是 MCP以及 MCP 可以做什么

一、什么是 MCP MCP(Model Context Protocol)是一个专为大型语言模型(L ... .NET6中使用Log4net记录日志

2026-02-14 · Shen, Luke
你的工作流程,值得一个“全自动数字分身”:录制、截图、成文,一气呵成

一、一句话认识 TestFlow Recorder 在数字化工作环境中,如何准确记录操作步骤并生成清 ... .NET6中使用Log4net记录日志

2026-02-14 · Xzavier Aaron
Flowise 前端框架配置指南

用户需求 问题:有没有适合配置 Flowise 的前端框架? 目标:寻找类似 Open WebUI ... .NET6中使用Log4net记录日志

2026-02-14 · Xzavier Aaron