using System; using System.Text; using System.IO; namespace UNetwork { /// <summary> /// 日志工具类 /// </summary> public sealed class LogUtil { private static object lockObj = new object(); //日志分类 public enum LogType { Info, //信息 Trace, //追踪 Warn, //警告 Error, //错误 Fatal //严重错误 } //输出设备 public enum LogDevice { Console, //输出到控制台 File, //输出到日志文件 ConsoleAndFile //输出到控制台和日志文件 } private static string LogFileName { get { string timeFormat = "yyyyMMddHH"; string timeStr = DateTime.Now.ToString(timeFormat); return timeStr; } } private static string CurrentTimeStr { get { string timeFormat = "yyyy-MM-dd HH:mm:ss"; string timeStr = DateTime.Now.ToString(timeFormat); return timeStr; } } private static string LogFilePath(LogType logType) { string logDirectory = "./Log"; string logClassify = string.Format("{0}/{1}", logDirectory, logType.ToString()); string logFile = string.Format("{0}/{1}.txt", logClassify, LogFileName); try { if (!Directory.Exists(logDirectory)) Directory.CreateDirectory(logDirectory); if (!Directory.Exists(logClassify)) Directory.CreateDirectory(logClassify); } catch(Exception ex) { Console.WriteLine("Create Directory Failured\n{0}\n{1}", ex.Message, ex.StackTrace); } return logFile; } private static void Write(string log, LogType logType=LogType.Info, LogDevice logDevice=LogDevice.Console) { lock (lockObj) { //文字颜色 switch (logType) { case LogType.Fatal: case LogType.Error: Console.ForegroundColor = ConsoleColor.Red; break; case LogType.Trace: Console.ForegroundColor = ConsoleColor.Green; break; case LogType.Warn: Console.ForegroundColor = ConsoleColor.Yellow; break; default: Console.ForegroundColor = ConsoleColor.White; break; } //是否需要输出到控制台 string content = string.Format("[{0}] {1}\r\n", CurrentTimeStr, log); switch (logDevice) { case LogDevice.Console: Console.Write(content); break; case LogDevice.File: break; case LogDevice.ConsoleAndFile: Console.Write(content); break; } Console.ForegroundColor = ConsoleColor.White; //是否需要输出到日志文件 if (logDevice == LogDevice.File || logDevice == LogDevice.ConsoleAndFile) { string logFilePath = LogFilePath(logType); try { File.AppendAllText(logFilePath, content, Encoding.UTF8); } catch (Exception ex) { Console.WriteLine("Write Log Failured\n{0}\n{1}", ex.Message, ex.StackTrace); } } } } /// <summary> /// 写入一般信息 /// </summary> /// <param name="log"></param> public static void Info(string log, LogDevice logDevice = LogDevice.Console) { Write(log, LogType.Info, logDevice); } /// <summary> /// 写入追踪日志 (记录程序执行流程) /// </summary> /// <param name="log"></param> public static void Trace(string log, LogDevice logDevice = LogDevice.Console) { Write(log, LogType.Trace, logDevice); } /// <summary> /// 写入出错日志 (指会导致程序无法按预期执行的错误) /// </summary> /// <param name="log"></param> public static void Error(string log, LogDevice logDevice = LogDevice.Console) { Write(log, LogType.Error, logDevice); } /// <summary> /// 致命错误 (需要结束应用程序的错误) /// </summary> /// <param name="log"></param> public static void Fatal(string log, LogDevice logDevice = LogDevice.Console) { Write(log, LogType.Fatal, logDevice); } /// <summary> /// 写入警告日志 /// </summary> /// <param name="log"></param> /// <param name="logDevice"></param> public static void Warn(string log, LogDevice logDevice = LogDevice.Console) { Write(log, LogType.Warn, logDevice); } } }