自定义简单日志记录类

说明:

实在被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);
            }
        }
效果图:


猜你喜欢

转载自blog.csdn.net/u013816709/article/details/78622772