Log.cs 4.2 KB

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