分享

自定义简单日志记录类

 鸿蛟家平 2019-12-19

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

源码如下(VS2015):

  1. /**************************************************
  2. *
  3. *命名空间: Common
  4. * 类名: FuncMyLog
  5. * 作者: 贾胜杰(2017/11/24/周五 9:22:34 )
  6. *模块说明: 自定义日志类
  7. *修改日志:
  8. *
  9. **************************************************/
  10. using System;
  11. using System.IO;
  12. using System.Text;
  13. using System.Windows.Forms;
  14. namespace Common
  15. {
  16. public static class FuncMyLog
  17. {
  18. /// <summary>
  19. /// 这里需要手动修改 ErrorLog 是我在本地的日志文件夹名称
  20. /// </summary>
  21. private static readonly string StrPath = Path.Combine(Application.StartupPath,"ErrorLog");
  22. /// <summary>
  23. /// 创建路径 按天保存
  24. /// </summary>
  25. /// <returns></returns>
  26. private static string CreatePath()
  27. {
  28. if (!Directory.Exists(StrPath))
  29. Directory.CreateDirectory(StrPath);
  30. return $"{StrPath}\\{DateTime.Now.ToString("yyyy-MM-dd")}.log";
  31. }
  32. /// <summary>
  33. /// 以流的方式保存文件
  34. /// </summary>
  35. /// <param name="strInfo">文本信息</param>
  36. private static void SaveDataLog(string strInfo)
  37. {
  38. StringBuilder sb = new StringBuilder();
  39. sb.Append($"***************记录时间【");
  40. sb.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));
  41. sb.Append("】***************");
  42. sb.AppendLine(strInfo);
  43. StreamWriter sw = new StreamWriter(CreatePath(), true, Encoding.Default);
  44. sw.Write(sb);
  45. sw.Flush();
  46. sw.Close();
  47. }
  48. /// <summary>
  49. /// 写日志
  50. /// </summary>
  51. /// <param name="strInfo">错误信息</param>
  52. /// <param name="isDirect">是否需要直接保存 默认为否(后台处理)</param>
  53. public static void WriteLog(string strInfo,bool isDirect=false)
  54. {
  55. SaveDataLog(isDirect ? $"详细信息:{strInfo}" : strInfo);
  56. }
  57. /// <summary>
  58. /// 写日志
  59. /// </summary>
  60. /// <param name="ex">Exception 实例</param>
  61. public static void WriteLog(Exception ex)
  62. {
  63. if (string.IsNullOrWhiteSpace(ex?.StackTrace)) return;
  64. string strStack = ex.StackTrace;
  65. //获取异常的开始方法
  66. int index1 = strStack.LastIndexOf(" 在 ", StringComparison.Ordinal);
  67. int index2 = strStack.LastIndexOf(" 位置 ", StringComparison.Ordinal);
  68. int indexMove = 3;
  69. string strMethod = strStack.Substring(index1 + indexMove, index2 - index1 - indexMove);
  70. //获取异常开始方法的位置
  71. int index3 = strStack.LastIndexOf("行号 ", StringComparison.Ordinal);
  72. string strRowIndex = strStack.Substring(index3 + indexMove, strStack.Length - index3 - indexMove);
  73. StringBuilder sb = new StringBuilder();
  74. sb.AppendLine();
  75. sb.Append($"出错位置:{strMethod} ");
  76. sb.Append($"(第{strRowIndex}行)");
  77. sb.AppendLine();
  78. sb.AppendLine($"异常信息:{ex.Message}");
  79. sb.AppendLine($"详细信息:{ex.StackTrace}");
  80. SaveDataLog(sb.ToString());
  81. }
  82. }
  83. }

调用示例:

  1. private void TestLog()
  2. {
  3. try
  4. {
  5. int a = 3;
  6. int b = 0;
  7. int c = a / b;
  8. }
  9. catch (Exception ex)
  10. {
  11. FuncMyLog.WriteLog(ex);
  12. }
  13. }
效果图:


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约