/*******************************************************************************
* 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;
}
}
}
}