Log.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. private static object LogFileLock = new object();
  23. #region Console 开启/关闭 API
  24. [DllImport("kernel32.dll")]
  25. public static extern Boolean AllocConsole();
  26. [DllImport("kernel32.dll")]
  27. public static extern Boolean FreeConsole();
  28. #endregion
  29. /// <summary>
  30. /// 获取输出颜色
  31. /// </summary>
  32. /// <param name="type">输出类型</param>
  33. /// <returns></returns>
  34. private static ConsoleColor GetColor(LogType type)
  35. {
  36. switch (type)
  37. {
  38. case LogType.v: return ConsoleColor.Gray;
  39. case LogType.d: return ConsoleColor.Blue;
  40. case LogType.i: return ConsoleColor.Green;
  41. case LogType.w: return ConsoleColor.Yellow;
  42. case LogType.e: return ConsoleColor.Red;
  43. default: return ConsoleColor.Gray;
  44. }
  45. }
  46. /// <summary>
  47. /// 写出到控制台
  48. /// </summary>
  49. /// <param name="type">类型</param>
  50. /// <param name="tag">标记</param>
  51. /// <param name="message">消息</param>
  52. private static void Write(LogType type, string message)
  53. {
  54. Console.ForegroundColor = GetColor(type);
  55. Console.WriteLine(LogFormat, DateTime.Now.ToString(TimeFormat), type.ToString(), message);
  56. WriteFile(type, message);
  57. }
  58. private static void WriteFile(LogType type, string message)
  59. {
  60. lock (LogFileLock)
  61. {
  62. //设置日志目录
  63. string logPath = AppDomain.CurrentDomain.BaseDirectory + "Log";
  64. string file = string.Format(@"{0}\{1}.txt", logPath, DateTime.Now.ToString("yyyy-MM-dd"));
  65. //创建日志目录
  66. DirTool.Create(logPath);
  67. //写出日志
  68. TxtTool.Append(file, string.Format(LogFormat, DateTime.Now.ToString(TimeFormat), type.ToString(), message));
  69. }
  70. }
  71. #region 分类详细输出
  72. /// <summary>
  73. /// 输出 verbose (啰嗦信息)
  74. /// </summary>
  75. /// <param name="message">消息</param>
  76. /// <param name="tag">可选:标记</param>
  77. public static void v<T>(T msg)
  78. {
  79. Write(LogType.v, msg.ToString());
  80. }
  81. /// <summary>
  82. /// 输出 Debug (调试信息)
  83. /// </summary>
  84. /// <param name="message">消息</param>
  85. /// <param name="tag">可选:标记</param>
  86. public static void d<T>(T msg)
  87. {
  88. Write(LogType.d, msg.ToString());
  89. }
  90. /// <summary>
  91. /// 输出 Information (重要信息)
  92. /// </summary>
  93. /// <param name="message">消息</param>
  94. /// <param name="tag">可选:标记</param>
  95. public static void i<T>(T msg)
  96. {
  97. Write(LogType.i, msg.ToString());
  98. }
  99. /// <summary>
  100. /// 输出 Warning (警告信息)
  101. /// </summary>
  102. /// <param name="message">消息</param>
  103. /// <param name="tag">可选:标记</param>
  104. public static void w<T>(T msg)
  105. {
  106. Write(LogType.w, msg.ToString());
  107. }
  108. /// <summary>
  109. /// 输出 Error (错误信息)
  110. /// </summary>
  111. /// <param name="message">消息</param>
  112. /// <param name="tag">可选:标记</param>
  113. public static void e<T>(T msg)
  114. {
  115. Write(LogType.e, msg.ToString());
  116. }
  117. #endregion
  118. }
  119. }