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