栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C# 使用 log4net 日志组件的方法

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# 使用 log4net 日志组件的方法

一、 什么是 log4net 

      Apache log4net 库是帮助程序员将日志语句输出到各种输出目标的工具,它是从Java中的Log4j迁移过来的一个.Net版的开源日志框架。log4net 的一个显著特征是分层记录器的概念,使用这些记录器可以有选择地控制任意粒度输出日志语句。主要特征如下:

  • 支持多个框架
  • 输出到多个日志记录目标
  • 分层日志记录体系结构
  • XML 配置
  • 动态配置
  • 日志记录上下文
  • 久经考验的架构
  • 模块化和可扩展设计
  • 高性能和灵活性   
二、C# 使用 log4net

       添加Nuget 包,搜索到“log4net”后 ,选择安装,具体如下图所示:

三、添加 log4net 配置文件

 使用 log4net需要我们配置log4net的配置文件,目前,配置文件是用 XML 编写的。一般有两种方式,一种是使用og4net自动生成的 “log4net.xml”进行配置,另一种是直接嵌入到运行程序的 app.config 文件中。   

 具体内容如下:



 
  

主要参数含义如下:

三、源码测试

       我们可以添加一个日志类,专门用于输出日志打印,具体代码如下(注意:log4net目前暂时不支持通过配置文件进行文件删除,可通过配置文件设置文件个数与大小进行覆盖备份文件。因此,自动删除日志需要代码实现):

public static class LogUtil
  {
    private static log4net.ILog Log { get; } = log4net.LogManager.GetLogger("log");

    /// 
    /// 日志加载设置
    /// 
    /// 日志配置文件名称
    /// 保留天数,-1表示不删除
    public static void Configure(string exeConfigFile,int day=-1)
    {
      log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(exeConfigFile));
      if (day == -1) return;
      var files = new System.IO.DirectoryInfo("log").GetFiles();
      foreach (var file in files)
      {
 // 定时删除日志文件
 if ((DateTime.Now - file.CreationTime).TotalDays > day)
 {
   file.Delete();
 }
      }
    }

    private static string GetMethodName(int skipframes = 2)
    {
      try
      {
 // 这里忽略skipframes层堆栈,也就忽略了当前方法GetMethodName,以及调用此方法的方法,这样拿到的就正好是外部调用打印日志所在函数的方法信息
 var method = new Stackframe(skipframes).GetMethod();
 var properties =
   method?.DeclaringType?.GetProperties(
     BindingFlags.Instance |
     BindingFlags.Static |
     BindingFlags.Public |
     BindingFlags.NonPublic);
 var property = properties?.Where(p => p.GetGetMethod(true) == method || p.GetSetMethod(true) == method)
   .FirstOrDefault();

 var name = $"{method?.DeclaringType?.ToString().Split('.').Last()}.{method?.Name}";
 return property == null
   ? $"{name,-50}"
   : $"{property.Name,-50}";
      }
      catch (Exception e)
      {
 return "ERROR TO GET CALLING METHOD";
      }
    }
    private static string NoWarp(string msg)
    {
      return msg?.Replace("rn", " ").Replace("n", " ");
    }
    private static string WrapException(string msg, Exception e)
    {
      var builder = new StringBuilder(msg);
      builder.Append("t[").Append(e.Message).Append("]");
      if (e.InnerException != null)
      {
 builder.Append(" --> [").Append(e.InnerException.Message).Append("]");
      }

      return builder.ToString();
    }




    public static void Debug(string msg)
    {
      Log.Debug(msg);
    }
    public static void Debug(string msg, Exception e)
    {
      Log.Debug(WrapException(msg, e), e);
    }

    public static void Info(string msg)
    {
      Log.Info(msg);
    }
    public static void Info(string msg, Exception e)
    {
      Log.Info(WrapException(msg, e), e);
    }

    public static void Warn(string msg)
    {
      Log.Warn(msg);
    }
    public static void Warn(string msg, Exception e)
    {
      Log.Warn(WrapException(msg, e), e);
    }

    public static void Error(string msg)
    {
      Log.Error(msg);
    }
    public static void Error(string msg, Exception e)
    {
      Log.Error(WrapException(msg, e), e);
    }

    public static void Fatal(string msg)
    {
      Log.Fatal(msg);
    }
    public static void Fatal(string msg, Exception e)
    {
      Log.Fatal(WrapException(msg, e), e);
    }
  }

 测试代码如下:

static void Main(string[] args)
    {
      try
      {
 string exeConfigFile = $"{AppDomain.CurrentDomain.baseDirectory}//Log4netDemo.exe.config";

 if (File.Exists(exeConfigFile) == false)
 {
   throw new Exception($"应用程序配置文件 [{exeConfigFile}] 不存在,无法加载日志 log4net 的配置");
 }

 LogUtil.Configure(exeConfigFile,1);
 LogUtil.Info("====================================== Log4netDemo started, log4net setup...");
 LogUtil.Warn("程序启动入参不合理");
 LogUtil.Error("程序启动失败");

 Console.ReadKey();
      }
      catch (Exception ex)
      {
 Console.WriteLine(ex);
 LogUtil.Error("程序加载失败",ex);
      }
    }

运行程序后,实际输出效果如下:

以上就是C# 使用 log4net 日志组件的方法的详细内容,更多关于C# 使用 log4net 日志组件的资料请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/121551.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号