Log4Net 工具二次封装

目录

引言

1、配置文件

2、创建日志对象

3、使用


引言

log4net 是一个高度灵活且强大的日志记录库,可用于记录应用程序的运行时信息。它支持各种日志输出格式和目的地,如文件、数据库、控制台等。传统用法我们需要手动配置log4net.config文件,这极大不利于我们对日志文件的管理和分类,今天就介绍一种封装方法,可以便于我们利用代码动态生成配置和创建日志文件并记录日志信息。

下载地址:https://download.csdn.net/download/weixin_42253874/88912810icon-default.png?t=N7T8https://download.csdn.net/download/weixin_42253874/88912810

1、配置文件

如果我们已经在log4net.config文件中配置过logger,我们可以通过GetLogger方法直接获取:

log4net.LogManager.GetLogger("mylogger")

 没有的话,我们组织一份配置类,这通常包括:日志名称、保存根目录、分支目录、日志文件大小、日志文件数量等。

  public class ClogSetting
  {
      private const int SIZE_CONTENT = 10485760;
      private const int COUNT_BACK = 20;

      public string Name { get; set; }

      //public string FileName { get; set; }

      public string RootDir { get; set; }

      public string BranchDir { get; set; }

      public int MaxFileSize { get; set; }

      public int MaxBackFiles { get; set; }

      public int MaxFileDate {get; set; }

      public ClogSetting()
          : this("Default", "DefaultLogs")
      {
      }

      public ClogSetting(string name, string branchDir)
      {
          this.RootDir = "D:\\Data\\Logs";
          this.MaxFileSize = 10485760;//10MB
          this.MaxBackFiles = 100;
          this.MaxFileDate= 30;
          this.Name = name;
          this.BranchDir = branchDir;
      }
    /// <summary>
    /// 删除过期日志
    /// </summary>
    /// <param name="logpath"></param>
    public static void DeleteLog(string logpath)
    {
   
        DirectoryInfo dyInfo = new DirectoryInfo(logpath);
        //获取文件夹下所有的文件
        foreach (FileInfo feInfo in dyInfo.GetFiles())
        {
            //判断文件日期是否小于指定日期,是则删除
            if (feInfo.CreationTime < DateTime.Now.AddDays(-MaxFileDate))
                feInfo.Delete();
        }
    }
  }

2、创建日志对象

这里声明一个静态类,在构造函数中进行Log4net的初始化,并提供一个静态方法创建并返回日志对象的接口类型ILog。

public static class ClogHepler
{
    private static ConcurrentDictionary<Guid, ClogHepler.PairLogItem> _logPairDictionary;

    static ClogHepler()
    {
        BasicConfigurator.Configure();
        ClogHepler._logPairDictionary = new ConcurrentDictionary<Guid, ClogHepler.PairLogItem>();
    }
    /// <summary>
    /// 创建或获取LOG记录实例
    /// </summary>
    /// <param name="logSetting"></param>
    /// <returns></returns>
    public static ILog Create(this ClogSetting logSetting)
    {
       
        ILog logger1 = LogManager.GetLogger(logSetting.Name);
        Logger logger2 = logger1.Logger as Logger;
        if (logger2.Appenders.Count == 0)
        {
            logger2.Level = logger2.Hierarchy.LevelMap["ALL"];
            RollingFileAppender rollingFileAppender = new RollingFileAppender();
            rollingFileAppender.Name = logSetting.Name;
            rollingFileAppender.File = logSetting.RootDir + "/"+logSetting.BranchDir+"/";
            rollingFileAppender.AppendToFile = true;
            rollingFileAppender.StaticLogFileName = false;
            rollingFileAppender.MaxFileSize = (long)logSetting.MaxFileSize;
            rollingFileAppender.MaxSizeRollBackups = logSetting.MaxBackFiles;
            RollingFileAppender newAppender = rollingFileAppender;
            if (logSetting.MaxBackFiles > 0)
            {
                newAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
                newAppender.DatePattern = "yyyy-MM-dd\".txt\"";
            }
            else
            {
                newAppender.RollingStyle = RollingFileAppender.RollingMode.Date;
                newAppender.DatePattern = "yyyy-MM-dd\".txt\"";
            }
            PatternLayout patternLayout = new PatternLayout()
            {
                ConversionPattern = "%d{yyyy-MM-dd HH:mm:ss.fff}\t[%thread]\t%level\t%logger\t-\t%message%newline"
            };
            patternLayout.ActivateOptions();
            newAppender.Layout = (ILayout)patternLayout;
            newAppender.Encoding = Encoding.UTF8;
            newAppender.ActivateOptions();
            logger2.AddAppender((IAppender)newAppender);
        }
       
        logSetting.DeleteLog(Path.Combine(logSetting.RootDir,logSetting.BranchDir));
        return logger1;
    }
}

3、使用

ClogSetting logsetting = new ClogSetting("logger", "logdir");
ILog mylogger = logsetting.Create();

mylogger.Info("日志消息");
mylogger.Error("日志消息");
mylogger.Warn("日志消息");

D:/Data/Logs/logdir/2024-02-23.txt
2024-02-23 09:15:15.880	[1]	INFO	logger -	日志消息
2024-02-23 09:15:16.141	[1]	ERROR	logger -	日志消息
2024-02-23 09:15:16.277	[1]	WARN	logger -	日志消息

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

James.TCG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值