Log4net生成Log日志

第一步添加引用


搜索log4net点击安装

第二步添加一个log4net的类

 public static  class Log4net
    {
        static ILog _log = null;
        #region Log
        /// <summary>
        /// 生成日志文件
        /// </summary>
        /// <param name="msg">生成日志文件的消息</param>
        /// <param name="logger">生成日志配置文件指向路径</param>
        /// <param name="head">消息追加</param>
        /// <param name="ex"></param>
        /// <returns></returns>
        public static void  log(this string msg, string logger, string head = "", Exception ex = null)
        {
            if (head != "")
            {
                head += msg;
            }
            else
            {
                head = msg;
            }
            if (ex == null)
            {
                LogManager.GetLogger(logger).Error(head);//生成日志

            }
            else
            {
                LogManager.GetLogger(logger).Error(head, ex);
            }
            //自动清除日志这里设置为7天后自动删除
            deletelog(logger);
        }


        public static string log(this Exception msg, string logger, string head = "")
        {
            if (head != "")
            {
                LogManager.GetLogger(logger).Error(head, msg);
            }
            else
            {
                LogManager.GetLogger(logger).Error(msg);
            }
            return head;
        }

        #endregion
        /// <summary>
        /// 删除日志
        /// </summary>
        /// <param name="logger"></param>
        public static void deletelog(string logger)
        {
            _log = LogManager.GetLogger(logger);
            Task.Run(() => {
                var apps = _log.Logger.Repository.GetAppenders();
                if (apps.Length <= 0)
                {
                    return;
                }
                var now = DateTime.UtcNow.AddDays(-7);//7天
                foreach (var item in apps)
                {
                    if (item is RollingFileAppender)
                    {
                        RollingFileAppender roll = item as RollingFileAppender;
                        var dir = Path.GetDirectoryName(roll.File);
                        var files = Directory.GetFiles(dir, "*.log");
                        

                        foreach (var filePath in files)
                        {
                            var file = new FileInfo(filePath);
                            if (file.CreationTimeUtc < now)
                            {
                                try
                                {
                                    file.Delete();
                                }
                                catch (Exception)
                                {

                                }
                            }
                        }
                    }
                }
            });
        }
    }
}


    

public class RefObject
{
    public static bool operator false(RefObject val) => null == val;
    public static bool operator true(RefObject val) => null != val;
    public static bool operator !(RefObject val) => null == val;

}

public class StackPatternLayout : PatternLayout
{
    public StackPatternLayout()
    {
        this.AddConverter("stack", typeof(StackTraceConverter));
    }
}

public class StackTraceConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        int len = 0;
        var stack = new StackTrace(true);
        var frames = stack.GetFrames();
        Queue<string> sb = new Queue<string>();
        for (int i = 0; i < frames.Length; i++)
        {
            var frame = frames[i];
            if (frame.GetMethod().DeclaringType.Assembly != typeof(LogManager).Assembly)
            {
                var cls = frame.GetMethod().DeclaringType.FullName;
                var m = frame.GetMethod().Name;
                var line = frame.GetFileLineNumber();
                if (line > 0)
                {
                    sb.Enqueue($"{cls}.{m} at {line}");
                }
                else if (len < 2)
                {
                    sb.Enqueue($"{cls}.{m} at {line}");
                    ++len;
                }
            }
        }
        len = 0;
        while (sb.Count > 0)
        {
            var log = sb.Dequeue();
            if (len > 0)
            {
                writer.WriteLine(log);
            }
            else
            {
                ++len;
            }
        }

    }

第三步

添加配置文件,添加一个XML文件即可

<log4net>
  <logger name="global">
    <level value="ERROR" />
    <appender-ref ref="GlobalAppender" />
  </logger>
  <appender name="GlobalAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="logs/global/" />
	  <param name="MaxSizeRollBackups" value="-1" />
	  <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
	  <param name="MaximumFileSize" value="10MB" />
	  <param name="RollingStyle" value="Date" />
	  <param name="DatePattern" value='"global_"yyyy-MM-dd".log"' />
	  <param name="StaticLogFileName" value="false" />
	  <param name="AppendToFile" value="true" />
    <layout type="StackPatternLayout">
      <param name="ConversionPattern" value="%n[%d][%t]%m%n%stack%n" />
    </layout>
    <!--&lt; &gt; = <> %n = 回车-->
  </appender>
  <logger name="print">
    <level value="ERROR" />
    <appender-ref ref="PrintAppender" />
  </logger>
  <appender name="PrintAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="logs/print/" />
	  <param name="MaxSizeRollBackups" value="-1" />
	  <!--最小锁定模型以允许多个进程可以写入同一个文件-->
	  <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
	  <param name="MaximumFileSize" value="10MB" />
	  <param name="RollingStyle" value="Date" />
	  <param name="DatePattern" value='"print_"yyyy-MM-dd".log"' />
	  <param name="StaticLogFileName" value="false" />
	  <param name="AppendToFile" value="true" />
    <layout type="StackPatternLayout">
      <param name="ConversionPattern" value="%n[%d][%t]%m%n%stack%n" />
    </layout>
    <!--&lt; &gt; = <> %n = 回车-->
		</log4net>

到这里基本没问题啦!没有引用的地方添加引用即可

第4步

在你需要生产log的地方调用Log4net这个类即可生成日志

   try
                {
                    var response = await visitor.Client.GetStringAsync(url);
                    var success = JsonConvert.DeserializeObject<WebApiSuccess>(response);
                    if (success)
                    {
                        var ret = JsonConvert.DeserializeObject<WebApiResult<T>>(response);
                        return ret.result;
                    }
                    //这里调用,
                    $"请求{url}时错误,{success}\n{response}".log(webapi);
                }
                catch (Exception e)
                {
                   //这里调用,
                    $"请求{url}时错误,{e.Message}".log(webapi,ex: e);
                }

静态类的静态方法可直接调用

在这里插入代码片

效果

在这里插入图片描述
拿走不谢!
配置文件不清楚的地方多百度,可以根据自己的需要进行修改,以适应项目需求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值