0
点赞
收藏
分享

微信扫一扫

一个非常好用的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); } }}

举报

相关推荐

0 条评论