/******************************************************************************* * Copyright(c) 2012 dongke All rights reserved. / Confidential * 类的信息: * 1.程序名称:OutputLog.cs * 2.功能描述:系统客户端错误日志输出类 * 编辑履历: * 作者 日期 版本 修改内容 * 欧阳涛 2012/06/07 1.00 新建 *******************************************************************************/ using System; using System.IO; namespace Dongke.IBOSS.PRD.Basics.Library { #region 日志类型枚举 /// /// 输出本地日志的类型 /// public enum LogPriority { /// /// Debug测试 /// Debug, /// /// 消息 /// Information, /// /// 警告 /// Warning, /// /// 错误 /// Error, } #endregion public class OutputLog { #region 变量定义 private const int DELETE_FILE_PERIOD = -30; // 日志文件删除周期,单位:天 #endregion #region 公开方法/属性 /// /// 日志文件写入方法 /// /// 日志级别 /// 出现错误文件名 /// 出现错误方法 /// 错误内容 public static void Trace(LogPriority priority, string fileName, string methodName, string message) { // 日志文件的路径 string logFilePath = LocalPath.LogRootPath; // 消息写入日志文件 TraceLog(priority, fileName, methodName, message, logFilePath); } #endregion #region 私有方法/函数 /// /// 写日志文件方法 /// /// 日志级别 /// 字节 /// 日志路径 /// 日志文件名 private static void TraceLog(LogPriority priority, byte[] bytes, string logFilePath, string logFileName) { try { // 日志文件存放的路径不存在,创建路径 if (!Directory.Exists(logFilePath)) { Directory.CreateDirectory(logFilePath); } // 日志文件名 string logFile = logFilePath + logFileName; // 写入日志文本 File.WriteAllBytes(logFile, bytes); } catch (Exception ex) { throw ex; } } /// /// 书写错误日志 /// /// 日志级别 /// 错误的源文件名 /// 错误的源方法 /// 错误消息 /// 错误日志路径 public static void TraceLog(LogPriority priority, string fileName, string methodName, string message, string logFilePath) { try { // 日志文件存放的路径不存在,创建路径 if (!Directory.Exists(logFilePath)) { Directory.CreateDirectory(logFilePath); } // 文件名 string logFile = logFilePath + DateTime.Now.ToString("yyyy-MM-dd") + ".log"; // 文件名不存在的情况下,删除旧文件 if (!File.Exists(logFile)) { // 旧文件删除 DeleteLogFile(logFilePath); } // 把错误消息写入日志文件 System.Text.StringBuilder writeMessage = new System.Text.StringBuilder(); //writeMessage.AppendLine(); writeMessage.AppendLine("---------------------------------------------------------------------------"); writeMessage.Append(GetLogPriority(priority).PadRight(14, ' ')); writeMessage.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").PadRight(14, ' ')); writeMessage.Append(fileName.PadRight(20, ' ') + " "); writeMessage.Append(methodName.PadRight(20, ' ') + " "); writeMessage.AppendLine(); writeMessage.Append(message); writeMessage.AppendLine(); writeMessage.AppendLine("---------------------------------------------------------------------------"); // 日志文件写入 WriteLogFile(priority, writeMessage.ToString(), logFile); } catch (Exception ex) { throw ex; } } /// /// 写日志方法 /// /// 日志级别 /// 日志消息 /// 写入文件名 private static void WriteLogFile(LogPriority priority, string message, string fileName) { try { StreamWriter swStreamWriter = File.AppendText(fileName); swStreamWriter.WriteLine(message); swStreamWriter.Close(); } catch (Exception ex) { throw ex; } } /// /// 删除非法日志文件和过时的日志文件 /// /// 日志文件路径 private static void DeleteLogFile(string logFilePath) { try { // 日志文件夹里面的所有的日志文件的取得 //DirectoryInfo diDirectoryInfo = new DirectoryInfo(logFilePath); //FileInfo[] fiFileInfo = diDirectoryInfo.GetFiles(); //// 旧文件删除 //string strLogFile = string.Empty; //foreach (FileInfo fileInfo in fiFileInfo) //{ // strLogFile = fileInfo.Name.Remove(fileInfo.Name.LastIndexOf('.')); // DateTime? datDateTime; // bool bolCheckValid = Utility.IsValidDate(strLogFile, out datDateTime); // if (!bolCheckValid) // { // // 无效的文件删除 // File.Delete(fileInfo.FullName); // } // else // { // // 旧文件的删除 // if (datDateTime < DateTime.Now.AddDays(DELETE_FILE_PERIOD)) // { // File.Delete(fileInfo.FullName); // } // } //} string[] files = System.IO.Directory.GetFiles(logFilePath, "*.log"); if (files != null && files.Length > 0) { DateTime deathDate = DateTime.Now.Date.AddDays(-60); foreach (string file in files) { try { //if (File.GetCreationTime(file) < deathDate) if (File.GetLastWriteTime(file) < deathDate) { File.Delete(file); } } catch { } } } } catch (Exception ex) { //throw ex; } } /// /// 取得日志的级别 /// /// 日志级别枚举 /// private static string GetLogPriority(LogPriority priority) { try { string strLogPriority = string.Empty; switch (priority) { case LogPriority.Debug: strLogPriority = "[DEBUG]"; break; case LogPriority.Information: strLogPriority = "[INFORMATION]"; break; case LogPriority.Error: strLogPriority = "[ERROR]"; break; case LogPriority.Warning: strLogPriority = "[WARNING]"; break; default: break; } return strLogPriority; } catch (Exception ex) { throw ex; } } #endregion } }