/******************************************************************************* * 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 = AppDomain.CurrentDomain.BaseDirectory+ "Log\\" + priority + "\\"; // 消息写入日志文件 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 = IsValidDate(strLogFile, out datDateTime); if (!bolCheckValid) { // 无效的文件删除 File.Delete(fileInfo.FullName); } else { // 旧文件的删除 if (datDateTime < DateTime.Now.AddDays(DELETE_FILE_PERIOD)) { File.Delete(fileInfo.FullName); } } } } 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 public static bool IsValidDate(string strDateTime, out DateTime? dateTime) { DateTime returnDatetime; if (DateTime.TryParse(strDateTime, out returnDatetime)) { dateTime = returnDatetime; return true; } else { dateTime = null; return false; } } } }