| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- /*******************************************************************************
- * 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 日志类型枚举
- /// <summary>
- /// 输出本地日志的类型
- /// </summary>
- public enum LogPriority
- {
- /// <summary>
- /// Debug测试
- /// </summary>
- Debug,
- /// <summary>
- /// 消息
- /// </summary>
- Information,
- /// <summary>
- /// 警告
- /// </summary>
- Warning,
- /// <summary>
- /// 错误
- /// </summary>
- Error,
- }
- #endregion
- public class OutputLog
- {
- #region 变量定义
- private const int DELETE_FILE_PERIOD = -30; // 日志文件删除周期,单位:天
- #endregion
- #region 公开方法/属性
- /// <summary>
- /// 日志文件写入方法
- /// </summary>
- /// <param name="priority">日志级别</param>
- /// <param name="fileName">出现错误文件名</param>
- /// <param name="methodName">出现错误方法</param>
- /// <param name="message">错误内容</param>
- public static void Trace(LogPriority priority, string fileName,
- string methodName, string message)
- {
- // 日志文件的路径
- string logFilePath = LocalPath.LogRootPath;
- // 消息写入日志文件
- TraceLog(priority, fileName, methodName, message, logFilePath);
- }
- #endregion
- #region 私有方法/函数
- /// <summary>
- /// 写日志文件方法
- /// </summary>
- /// <param name="priority">日志级别</param>
- /// <param name="bytes">字节</param>
- /// <param name="logFilePath">日志路径</param>
- /// <param name="logFileName">日志文件名</param>
- 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;
- }
- }
- /// <summary>
- /// 书写错误日志
- /// </summary>
- /// <param name="priority">日志级别</param>
- /// <param name="fileName">错误的源文件名</param>
- /// <param name="methodName">错误的源方法</param>
- /// <param name="message">错误消息</param>
- /// <param name="logFilePath">错误日志路径</param>
- 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;
- }
- }
- /// <summary>
- /// 写日志方法
- /// </summary>
- /// <param name="priority">日志级别</param>
- /// <param name="message">日志消息</param>
- /// <param name="fileName">写入文件名</param>
- 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;
- }
- }
- /// <summary>
- /// 删除非法日志文件和过时的日志文件
- /// </summary>
- /// <param name="logFilePath">日志文件路径</param>
- 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);
- }
- }
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- /// <summary>
- /// 取得日志的级别
- /// </summary>
- /// <param name="priority">日志级别枚举</param>
- /// <returns></returns>
- 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
- }
- }
|