using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; using Y.Utils.Net20.FileUtils; using Y.Utils.Net20.TxtUtils; namespace Y.Utils.Net20.LogUtils { /// /// Log 输出工具 /// /// 说明: /// 1、Log.AllocConsole();开启控制台 /// 2、Log.FreeConsole();关闭控制台 /// 3、Log.i("information");输出消息 /// public class Log { //输出的 Log 格式 const string LogFormat = "{0} {1} {2}"; const string TimeFormat = "HH:mm:ss.fff"; public static bool IsWriteFile = true; private static object LogFileLock = new object(); #region Console 开启/关闭 API [DllImport("kernel32.dll")] public static extern Boolean AllocConsole(); [DllImport("kernel32.dll")] public static extern Boolean FreeConsole(); #endregion /// /// 获取输出颜色 /// /// 输出类型 /// private static ConsoleColor GetColor(LogType type) { switch (type) { case LogType.v: return ConsoleColor.Gray; case LogType.d: return ConsoleColor.Blue; case LogType.i: return ConsoleColor.Green; case LogType.w: return ConsoleColor.Yellow; case LogType.e: return ConsoleColor.Red; default: return ConsoleColor.Gray; } } /// /// 写出到控制台 /// /// 类型 /// 标记 /// 消息 private static void Write(LogType type, string message) { Console.ForegroundColor = GetColor(type); Console.WriteLine(LogFormat, DateTime.Now.ToString(TimeFormat), type.ToString(), message); if (IsWriteFile) WriteFile(type, message); } private static void WriteFile(LogType type, string message) { if (IsWriteFile) { lock (LogFileLock) { //设置日志目录 string logPath = AppDomain.CurrentDomain.BaseDirectory + "Log"; string file = string.Format(@"{0}\{1}.txt", logPath, DateTime.Now.ToString("yyyy-MM-dd")); //创建日志目录 DirTool.Create(logPath); //写出日志 TxtTool.Append(file, string.Format(LogFormat, DateTime.Now.ToString(TimeFormat), type.ToString(), message)); } } } #region 分类详细输出 /// /// 输出 verbose (啰嗦信息) /// /// 消息 /// 可选:标记 public static void v(T msg) { Write(LogType.v, msg.ToString()); } /// /// 输出 Debug (调试信息) /// /// 消息 /// 可选:标记 public static void d(T msg) { Write(LogType.d, msg.ToString()); } /// /// 输出 Information (重要信息) /// /// 消息 /// 可选:标记 public static void i(T msg) { Write(LogType.i, msg.ToString()); } /// /// 输出 Warning (警告信息) /// /// 消息 /// 可选:标记 public static void w(T msg) { Write(LogType.w, msg.ToString()); } /// /// 输出 Error (错误信息) /// /// 消息 /// 可选:标记 public static void e(T msg) { Write(LogType.e, msg.ToString()); } #endregion } }