第一次自主封装Util类,尝试封装一个日志的操作类LogUtil,逻辑不复杂,也没调用那些复杂的类,只是简单的IO操作。
1 using System; 2 using System.IO; 3 4 namespace Common 5 { 6 /// <summary> 7 /// 日志类 8 /// </summary> 9 public static class LogUtil 10 { 11 /// <summary> 12 /// 配置默认路径 13 /// </summary> 14 private static string defaultPath = System.Configuration.ConfigurationManager.AppSettings["logPath"]; 15 16 #region Exception异常日志 17 18 /// <summary> 19 /// 写异常日志,存放到默认路径 20 /// </summary> 21 /// <param name="ex">异常类</param> 22 public static void WriteError(Exception ex) 23 { 24 WriteError(ex, defaultPath); 25 } 26 27 /// <summary> 28 /// 写异常日志,存放到指定路径 29 /// </summary> 30 /// <param name="ex">异常类</param> 31 /// <param name="path">日志存放路径</param> 32 public static void WriteError(Exception ex, string path) 33 { 34 string errMsg = CreateErrorMeg(ex); 35 WriteLog(errMsg, path, LogType.Error); 36 } 37 38 #endregion 39 40 #region 普通日志 41 42 /// <summary> 43 /// 写普通日志,存放到默认路径,使用默认日志类型 44 /// </summary> 45 /// <param name="msg">日志内容</param> 46 public static void WriteLog(string msg) 47 { 48 WriteLog(msg, LogType.Info); 49 } 50 51 /// <summary> 52 /// 写普通日志,存放到默认路径,使用指定日志类型 53 /// </summary> 54 /// <param name="msg">日志内容</param> 55 /// <param name="logType">日志类型</param> 56 public static void WriteLog(string msg, LogType logType) 57 { 58 WriteLog(msg, defaultPath, logType); 59 } 60 61 /// <summary> 62 /// 写普通日志,存放到指定路径,使用默认日志类型 63 /// </summary> 64 /// <param name="msg">日志内容</param> 65 /// <param name="path">日志存放路径</param> 66 public static void WriteLog(string msg, string path) 67 { 68 WriteLog(msg, path, LogType.Info); 69 } 70 71 /// <summary> 72 /// 写普通日志,存放到指定路径,使用指定日志类型 73 /// </summary> 74 /// <param name="msg">日志内容</param> 75 /// <param name="path">日志存放路径</param> 76 /// <param name="logType">日志类型</param> 77 public static void WriteLog(string msg, string path, LogType logType) 78 { 79 string fileName = path.Trim('\\')+"\\"+CreateFileName(logType); 80 string logContext = FormatMsg(msg,logType); 81 WriteFile(logContext, fileName); 82 } 83 84 #endregion 85 86 #region 其他辅助方法 87 88 /// <summary> 89 /// 写日志到文件 90 /// </summary> 91 /// <param name="logContext">日志内容</param> 92 /// <param name="fullName">文件名</param> 93 private static void WriteFile(string logContext, string fullName) 94 { 95 FileStream fs = null; 96 StreamWriter sw = null; 97 98 int splitIndex = fullName.LastIndexOf('\\'); 99 if (splitIndex == -1) return; 100 string path = fullName.Substring(0, splitIndex); 101 102 if (!Directory.Exists(path)) Directory.CreateDirectory(path); 103 104 try 105 { 106 if (!File.Exists(fullName)) fs = new FileStream(fullName, FileMode.CreateNew); 107 else fs = new FileStream(fullName, FileMode.Append); 108 109 sw = new StreamWriter(fs); 110 sw.WriteLine(logContext); 111 } 112 finally 113 { 114 if (sw != null) 115 { 116 sw.Close(); 117 sw.Dispose(); 118 } 119 if (fs != null) 120 { 121 fs.Close(); 122 fs.Dispose(); 123 } 124 } 125 } 126 127 /// <summary> 128 /// 格式化日志,日志是默认类型 129 /// </summary> 130 /// <param name="msg">日志内容</param> 131 /// <returns>格式化后的日志</returns> 132 private static string FormatMsg(string msg) 133 { 134 return FormatMsg(msg, LogType.Info); 135 } 136 137 /// <summary> 138 /// 格式化日志 139 /// </summary> 140 /// <param name="msg">日志内容</param> 141 /// <param name="logType">日志类型</param> 142 /// <returns>格式化后的日志</returns> 143 private static string FormatMsg(string msg, LogType logType) 144 { 145 string result; 146 string header = string.Format("[{0}][{1} {2}] ", logType.ToString(), DateTime.Now.ToShortDateString(),DateTime.Now.ToShortTimeString()); 147 result= header + msg; 148 return result; 149 } 150 151 /// <summary> 152 /// 从异常类中获取日志内容 153 /// </summary> 154 /// <param name="ex">异常类</param> 155 /// <returns>日志内容</returns> 156 private static string CreateErrorMeg(Exception ex) 157 { 158 string result = string.Empty; 159 result += ex.Message+"\r\n"; 160 result += ex.StackTrace+"\r\n"; 161 return result; 162 } 163 164 /// <summary> 165 /// 生成日志文件名 166 /// </summary> 167 /// <param name="logType">日志类型</param> 168 /// <returns>日志文件名</returns> 169 private static string CreateFileName(LogType logType) 170 { 171 string result = DateTime.Now.ToString("yyyy-MM-dd");
172 if (logType != LogType.Info) 173 result = logType.ToString() + result+".log"; 174 return result; 175 } 176 177 #endregion 178 } 179 180 /// <summary> 181 /// 日志类型 182 /// </summary> 183 public enum LogType 184 { 185 Error, 186 Info, 187 Option 188 } 189 }