本类适合C#项目在本地记录文本文件,日志文件已经按照年月/日/类型分文件夹存储,因此不会产生单个大文件。固然,若是项目中有记录大量日志的逻辑,那么产生单个大的日志文件也是没办法的事情。本类是单线程日志记录类,正在计划完善称为多线程而且更为规范的日志记录方式。git
点我打开多线程
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace Common { public class SaveTextLog { private static string lockString = "ab3cdef1ghi5jklmno4pqrstuvw23xyz123456ds789098e7654321zyxabc;;;asd0fasdfa"; private static string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; //存储在本程序目录下 /// <summary> /// 记录错误消息到文件日志 /// </summary> /// <param name="error">错误消息</param> public static void WriteErrorLog(string error) { WriteToLog(path, "Error", error); } /// <summary> /// 记录操做日志到文件日志 /// </summary> /// <param name="message">操做日志</param> public static void WriteOperateLog(string message) { WriteToLog(path, "Operate", message); } /// <summary> /// 记录系统操做 /// </summary> /// <param name="message">系统操做消息</param> public static void WriteSystemLog(string message) { WriteToLog(path, "System", message); } public static void WriteException(string message) { WriteToLog(path, "Exception", message); } private static void WriteToLog(string filePath, string fileName, string message) { if (string.IsNullOrEmpty(filePath) || filePath.Trim() == "") { filePath = System.AppDomain.CurrentDomain.BaseDirectory; } try { lock (lockString + fileName) { if (!Directory.Exists(filePath + "log\\" + DateTime.Now.Year.ToString() + "\\" + DateTime.Now.Month.ToString())) { Directory.CreateDirectory(filePath + "log\\" + DateTime.Now.Year.ToString() + "\\" + DateTime.Now.Month.ToString()); } using (StreamWriter sw = new StreamWriter(filePath + "log\\" + DateTime.Now.Year.ToString() + "\\" + DateTime.Now.Month.ToString() + "\\" + fileName + "_" + DateTime.Now.ToString("yyyy_MM_dd") + ".txt", true, System.Text.Encoding.Default)) { sw.WriteLine("[" + DateTime.Now.ToString("HH:mm:ss") + "]\r\n" + message); sw.Flush(); sw.Dispose(); } } } catch { //已经没法再次处理了 } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Common { /// <summary> /// 日志扩展类 /// </summary> public class SaveTextLogExtend { /// <summary> /// 输出异常到文本文件 /// </summary> /// <param name="methodName">方法名</param> /// <param name="ex">异常</param> public static void WriteErrorLog(string methodName, Exception ex) { SaveTextLog.WriteErrorLog("{" + methodName + "}\r\n" + ex); } /// <summary> /// 输出异常到文本文件 /// </summary> /// <param name="methodName">方法名</param> /// <param name="errorDescription">异常</param> public static void WriteErrorLog(string methodName, string errorDescription) { SaveTextLog.WriteErrorLog("{" + methodName + "}\r\n" + errorDescription); } /// <summary> /// 写日志 /// </summary> /// <param name="methodName">方法名</param> /// <param name="message">日志消息</param> public static void WriteOperateLog(string methodName, string message) { SaveTextLog.WriteOperateLog("{" + methodName + "}\r\n" + message); } /// <summary> /// 写系统操做日志 /// </summary> /// <param name="methodName">方法</param> /// <param name="message">消息</param> public static void WriteSystemLog(string methodName, string message) { SaveTextLog.WriteSystemLog("{" + methodName + "}\r\n" + message); } /// <summary> /// 记录异常 /// </summary> /// <param name="ex"></param> public static void WriteException(Exception ex) { SaveTextLog.WriteException("{" + ex.TargetSite + "}\r\n" + ex); } } }