自定义简单日志记录类

Posted Jia_ShengJie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义简单日志记录类相关的知识,希望对你有一定的参考价值。

说明:

实在被log4net折磨的无语了,就自己写了一个简单的日志记录操作类。

源码如下(VS2015):

/**************************************************
*
*命名空间: Common
*      类名: FuncMyLog
*      作者: 贾胜杰(2017/11/24/周五 9:22:34 )
*模块说明: 自定义日志类
*修改日志:
*
**************************************************/

using System;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace Common

    public static class FuncMyLog
    
        /// <summary>
        /// 这里需要手动修改  ErrorLog 是我在本地的日志文件夹名称
        /// </summary>
        private static readonly string StrPath = Path.Combine(Application.StartupPath,"ErrorLog");

        /// <summary>
        /// 创建路径 按天保存
        /// </summary>
        /// <returns></returns>
        private static string CreatePath()
        
            if (!Directory.Exists(StrPath))
                Directory.CreateDirectory(StrPath);

            return $"StrPath\\\\DateTime.Now.ToString("yyyy-MM-dd").log";
        

        /// <summary>
        /// 以流的方式保存文件
        /// </summary>
        /// <param name="strInfo">文本信息</param>
        private static void SaveDataLog(string strInfo)
        
            StringBuilder sb = new StringBuilder();
            sb.Append($"***************记录时间【");
            sb.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));
            sb.Append("】***************");
            sb.AppendLine(strInfo);
            StreamWriter sw = new StreamWriter(CreatePath(), true, Encoding.Default);
            sw.Write(sb);
            sw.Flush();
            sw.Close();
        

        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="strInfo">错误信息</param>
        /// <param name="isDirect">是否需要直接保存 默认为否(后台处理)</param>
        public static void WriteLog(string strInfo,bool isDirect=false)
        
            SaveDataLog(isDirect ? $"详细信息:strInfo" : strInfo);
        

        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="ex">Exception 实例</param>
        public static void WriteLog(Exception ex)
        
            if (string.IsNullOrWhiteSpace(ex?.StackTrace)) return;
            string strStack = ex.StackTrace;
            //获取异常的开始方法
            int index1 = strStack.LastIndexOf(" 在 ", StringComparison.Ordinal);
            int index2 = strStack.LastIndexOf(" 位置 ", StringComparison.Ordinal);
            int indexMove = 3;
            string strMethod = strStack.Substring(index1 + indexMove, index2 - index1 - indexMove);
            //获取异常开始方法的位置
            int index3 = strStack.LastIndexOf("行号 ", StringComparison.Ordinal);
            string strRowIndex = strStack.Substring(index3 + indexMove, strStack.Length - index3 - indexMove);

            StringBuilder sb = new StringBuilder();
            sb.AppendLine();
            sb.Append($"出错位置:strMethod  ");
            sb.Append($"(第strRowIndex行)");
            sb.AppendLine();
            sb.AppendLine($"异常信息:ex.Message");
            sb.AppendLine($"详细信息:ex.StackTrace");
            SaveDataLog(sb.ToString());
        

    

调用示例:

  private void TestLog()
        
            try
            
                int a = 3;
                int b = 0;
                int c = a / b;
            
            catch (Exception ex)
            
                FuncMyLog.WriteLog(ex);
            
        
效果图:


以上是关于自定义简单日志记录类的主要内容,如果未能解决你的问题,请参考以下文章

自定义错误日志记录类

自定义注解+AOP记录访问日志

在 Spring Boot 应用程序中防止自定义异常的堆栈跟踪日志记录

小玩意--自定义log记录

SpringAOP+自定义注解实现日志记录

SpringAOP+自定义注解实现日志记录