Log.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using Y.Utils.FileUtils;
  8. using Y.Utils.TxtUtils;
  9. namespace Y.Utils.LogUtils
  10. {
  11. /// <summary>
  12. /// Log 输出工具
  13. ///
  14. /// 说明:
  15. /// 1、Log.AllocConsole();开启控制台
  16. /// 2、Log.FreeConsole();关闭控制台
  17. /// 3、Log.i("information");输出消息
  18. /// </summary>
  19. public class Log
  20. {
  21. //输出的 Log 格式
  22. const string LogFormat = "{0} {1} {2}";
  23. const string TimeFormat = "HH:mm:ss.fff";
  24. public static bool IsWriteFile = true;
  25. private static object LogFileLock = new object();
  26. #region Console 开启/关闭 API
  27. [DllImport("kernel32.dll")]
  28. public static extern Boolean AllocConsole();
  29. [DllImport("kernel32.dll")]
  30. public static extern Boolean FreeConsole();
  31. #endregion
  32. /// <summary>
  33. /// 获取输出颜色
  34. /// </summary>
  35. /// <param name="type">输出类型</param>
  36. /// <returns></returns>
  37. private static ConsoleColor GetColor(LogType type)
  38. {
  39. switch (type)
  40. {
  41. case LogType.v: return ConsoleColor.Gray;
  42. case LogType.d: return ConsoleColor.Blue;
  43. case LogType.i: return ConsoleColor.Green;
  44. case LogType.w: return ConsoleColor.Yellow;
  45. case LogType.e: return ConsoleColor.Red;
  46. default: return ConsoleColor.Gray;
  47. }
  48. }
  49. /// <summary>
  50. /// 写出到控制台
  51. /// </summary>
  52. /// <param name="type">类型</param>
  53. /// <param name="tag">标记</param>
  54. /// <param name="message">消息</param>
  55. private static void Write(LogType type, string message)
  56. {
  57. Console.ForegroundColor = GetColor(type);
  58. Console.WriteLine(LogFormat, DateTime.Now.ToString(TimeFormat), type.ToString(), message);
  59. if (IsWriteFile) WriteFile(type, message);
  60. }
  61. private static void WriteFile(LogType type, string message)
  62. {
  63. if (IsWriteFile)
  64. {
  65. lock (LogFileLock)
  66. {
  67. //设置日志目录
  68. string logPath = AppDomain.CurrentDomain.BaseDirectory + "Log";
  69. string file = string.Format(@"{0}\{1}.txt", logPath, DateTime.Now.ToString("yyyy-MM-dd"));
  70. //创建日志目录
  71. DirTool.Create(logPath);
  72. //写出日志
  73. TxtTool.Append(file, string.Format(LogFormat, DateTime.Now.ToString(TimeFormat), type.ToString(), message));
  74. }
  75. }
  76. }
  77. #region 分类详细输出
  78. /// <summary>
  79. /// 输出 verbose (啰嗦信息)
  80. /// </summary>
  81. /// <param name="message">消息</param>
  82. /// <param name="tag">可选:标记</param>
  83. public static void v<T>(T msg)
  84. {
  85. Write(LogType.v, msg.ToString());
  86. }
  87. /// <summary>
  88. /// 输出 Debug (调试信息)
  89. /// </summary>
  90. /// <param name="message">消息</param>
  91. /// <param name="tag">可选:标记</param>
  92. public static void d<T>(T msg)
  93. {
  94. Write(LogType.d, msg.ToString());
  95. }
  96. /// <summary>
  97. /// 输出 Information (重要信息)
  98. /// </summary>
  99. /// <param name="message">消息</param>
  100. /// <param name="tag">可选:标记</param>
  101. public static void i<T>(T msg)
  102. {
  103. Write(LogType.i, msg.ToString());
  104. }
  105. /// <summary>
  106. /// 输出 Warning (警告信息)
  107. /// </summary>
  108. /// <param name="message">消息</param>
  109. /// <param name="tag">可选:标记</param>
  110. public static void w<T>(T msg)
  111. {
  112. Write(LogType.w, msg.ToString());
  113. }
  114. /// <summary>
  115. /// 输出 Error (错误信息)
  116. /// </summary>
  117. /// <param name="message">消息</param>
  118. /// <param name="tag">可选:标记</param>
  119. public static void e<T>(T msg)
  120. {
  121. Write(LogType.e, msg.ToString());
  122. }
  123. #endregion
  124. }
  125. }