日志记录类
代码:
namespace Assist.Log { public static class DownLog { private static string FileName = string.Empty; private static StreamWriter swLog = null; private static readonly string ExtName = "_DownLog.txt";//日志类型 private static readonly string ConfigLogPath = "LogPath";//日志储存路径 private static readonly string ConfigLogSaveDate = "LogSaveDay";//储存天数 private static System.Collections.Generic.Queue<string> LogBuffer; private static ThreadStart job = new ThreadStart(WriterLog); private static Thread thread = new Thread(job); /// <summary> /// 存放日志目录 /// </summary> private static string _LogPath = null; private static string LogPath { get { if (_LogPath == null) { if (ConfigurationManager.AppSettings[ConfigLogPath] != null) { _LogPath = ConfigurationManager.AppSettings[ConfigLogPath]; } else {//默认值 //_LogPath = AppDomain.CurrentDomain.BaseDirectory + @"log\";//App应用 _LogPath = AppDomain.CurrentDomain.BaseDirectory + @"bin\Log\";//Web应用 } } return _LogPath; } } /// <summary> /// 日志保存期(天) /// </summary> private static int _SaveDay = -1; private static int SaveDay { get { if (_SaveDay == -1) { if (ConfigurationManager.AppSettings[ConfigLogSaveDate] != null) { _SaveDay = int.Parse(ConfigurationManager.AppSettings[ConfigLogSaveDate]); } else {//默认值 _SaveDay = 31; } } return _SaveDay; } } private static void WriterLog() { while (true) { TextWriter twLog = GetStreamWriter(); while (LogBuffer!=null && LogBuffer.Count > 0) { twLog.Write(LogBuffer.Dequeue() + "\r\n"); twLog.Flush(); //Thread.Sleep(50); } Thread.Sleep(30); } } private static StreamWriter GetStreamWriter() { if ((FileName != System.DateTime.Now.ToString("yyyy_MM_dd")) || swLog == null) { if ((swLog != null)) swLog.Close(); if (!Directory.Exists(LogPath)) { Directory.CreateDirectory(LogPath); } FileName = System.DateTime.Now.ToString("yyyy_MM_dd"); DelLog(LogPath, SaveDay); try { swLog = new StreamWriter(Path.Combine(LogPath, FileName + ExtName), true, System.Text.Encoding.UTF8, 1024); } catch { if ((swLog != null)) { swLog.Close(); System.Threading.Thread.Sleep(30); swLog = new StreamWriter(Path.Combine(LogPath, FileName + ExtName), true, System.Text.Encoding.UTF8, 1024); } } } return swLog; } /// <summary> /// 系统日志信息记录 /// </summary> /// <param name="Info">记录的内容(用;号分开)</param> public static void WriteLog(string Info) { if (LogBuffer == null) { LogBuffer = new System.Collections.Generic.Queue<string>(); thread.IsBackground = true; thread.Start(); } if (!string.IsNullOrEmpty(Info)) { LogBuffer.Enqueue(Info); } } /// <summary> /// 自动删除过期日志文件 /// </summary> /// <param name="path">路径</param> /// <param name="day">超出的天数</param> private static void DelLog(string path, double day) { if (SaveDay > 0) { DirectoryInfo folder = new DirectoryInfo(path); FileInfo[] chldFiles = folder.GetFiles("*" + ExtName); foreach (FileInfo chlFile in chldFiles) { try { if (chlFile.Name.Replace(ExtName, "").CompareTo(DateTime.Now.AddDays(-day).ToString("yyyy_MM_dd")) <= 0) chlFile.Delete(); } catch { } } } } } }
调用:
Assist.Log.DownLog.WriteLog(“日志内容,要求string类型”);