一个非常好用的log4net日志记录库

在.net项目中,经常使用log4net类库来记录项目的日志,如果需要记录是哪个类哪个方法,经常需要在各个类中定义一个静态的属性,用于获取是哪个类哪个方法。本文介绍使用反射技术,获取调用方的类和方法名。

    首先,在程序入口处,初始化日志记录,否则无法自动生成日志文件。

Logger.Initialize();

后面就可以在任意引用了本库的地方,使用日志记录。

/// <summary>
        /// 开始屏幕录像
        /// </summary>
        public string StartCaptureScreen()
        {
            if (RecordScreenParameter == null)
            {
                Logger.Debug($"录屏参数{nameof(RecordScreenParameter)}为空,无法执行录屏!");
                
            }
            if (!RecordScreenParameter.IsEnabled)
            {
                Logger.Debug($"您未启用录屏参数{nameof(RecordScreenParameter.IsEnabled)},无法执行录屏!");                
            }
          }

错误记录

try
 {
 
 }
 catch (Exception ex)
            {
                Logger.Error(ex.Message);
            };

那么如何通过反射技术获取调用者的方法名呢,下面是核心代码

public static void Debug(object message)
        {
            MethodBase method = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod();
            var logger = LogManager.GetLogger(method.DeclaringType);
#if DEBUG
            Console.WriteLine(message);
#endif
            logger?.Debug(message);
        }

完整的代码如下:

using log4net;
using System.Reflection;
namespace System
{   
    /// <summary>
    /// 日志记录类
    /// </summary>
    public class Logger
    {
        /// <summary>
        /// 初始化ILog
        /// </summary>
        public static void Initialize()
        {
            LogManager.GetLogger(typeof(Logger));
        }
        public static void Debug(object message)
        {
            MethodBase method = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod();
            var logger = LogManager.GetLogger(method.DeclaringType);
#if DEBUG
            Console.WriteLine(message);
#endif
            logger?.Debug(message);
        }


        public static void Info(object message)
        {
            MethodBase method = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod();
            var logger = LogManager.GetLogger(method.DeclaringType);
#if DEBUG
            Console.WriteLine(message);
#endif
            logger?.Info(message);
        }


        public static void Warn(object message)
        {
            MethodBase method = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod();
            var logger = LogManager.GetLogger(method.DeclaringType);
#if DEBUG
            Console.WriteLine(message);
#endif
            logger?.Warn(message);
        }


        public static void Error(object message)
        {
            MethodBase method = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod();
            var logger = LogManager.GetLogger(method.DeclaringType);
#if DEBUG
            Console.WriteLine(message);
#endif
            logger?.Error(message);
        }


        public static void Fatal(object message)
        {
            MethodBase method = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod();
            var logger = LogManager.GetLogger(method.DeclaringType);
#if DEBUG
            Console.WriteLine(message);
#endif
            logger?.Fatal(message);
        }
    }
}

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值