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

 

橙子主题打折出售

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

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

留言板

发表回复

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

热门文章

修复群晖Synology Drive client右键菜单缺失问题 本教程主要解决windows10右键菜单中没有SynologyDrive菜单的问题,整体思路是找到...修复群晖SynologyDriveclient右键菜单缺失问题 作者:Pastore Antonio
1980 浏览量
docker如何查看一个镜像内部的目录结构及其内部都有哪些文件 前言:有时候我们会在docker上下载一个镜像,或者是上传一个镜像到docker上,甚至有时候就是在...docker如何查看一个镜像内部的目录结构及其内部都有哪些文件 作者:Pastore Antonio
1922 浏览量
Adobe Acrobat Pro 激活 这里记录了一些AdobeAcrobat的激活教程和组件。浏览量:1,806 作者:Pastore Antonio
1649 浏览量
追寻日出,找回自己 为什么我要去追寻日出?其实我是一个很懒的人,每次都起不来,直到有一次我在租房中睡到了大天亮,阳光照...追寻日出,找回自己 作者:Pastore Antonio
1606 浏览量
Swagger2 接口多级分组方法 swagger无疑是Java开发的最佳伴侣,接口非常方便调试;当然也有用Postman,因人而异吧...Swagger2接口多级分组方法 作者:Pastore Antonio
1522 浏览量