// Anthor : Andy Luo
// Function Description: 日志处理
// CopyRight By arping.cnblogs.net 200703
// =========================================
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
namespace Logger
{
enum#region enum
public enum LogLevel
{
Debug, Message, Error
}
public enum RecLogType
{
File,EventLog
}
#endregion
public class Logger
{
private Logger()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
protected const string SysFileDir = @"C:\Temp";
protected const string SysFileName = "Tools.log";
protected const string DefaultLogFileName = @"c:\temp\AndyLuoLogger.log";
protected const string ConfigPath = "LogPath";
protected const string ConfigName = "LogName";
Property#region Property
private string FileDir = string.Empty;
private string FileName = string.Empty;
private static Logger _instance = null;
private static Logger Instance
{
get
{
if(_instance == null)
{
_instance = new Logger();
}
return _instance;
}
}
private LogLevel _objLogLevel;
public LogLevel LogLevel
{
set{ _objLogLevel = value;}
get{ return _objLogLevel;}
}
private string _Msg;
public string Msg
{
set{ _Msg = value;}
get{ return _Msg;}
}
private string Date
{
get{ return System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");}
}
#endregion
Public NewLog#region Public NewLog
//config中指定路径
public static void NewLog(LogLevel objLogLevel,string Msg)
{
Instance.AddLog(objLogLevel,Msg);
}
public static void NewLog(System.Exception ex)
{
Instance.AddLog(ex);
}
public static void NewLog(LogLevel objLogLevel,string Msg,string FilePath,string FileName)
{
Instance.AddLog(objLogLevel,Msg,FilePath,FileName);
}
public static void NewLog(System.Exception ex,string FilePath,string FileName)
{
Instance.AddLog(ex,FilePath,FileName);
}
#endregion
AddLog()#region AddLog()
private void AddLog(LogLevel objLogLevel,string Msg)
{
this.LogLevel = objLogLevel;
this.Msg = Msg;
this.AddLog();
}
private void AddLog(LogLevel objLogLevel,string Msg,string FilePath,string FileName)
{
this.LogLevel = objLogLevel;
this.Msg = Msg;
this.FileDir = FilePath;
this.FileName = FileName;
this.AddLog();
}
private void AddLog(System.Exception ex)
{
this.LogLevel = LogLevel.Error;
this.Msg = ex.Message;
this.AddLog();
}
private void AddLog(System.Exception ex,string FilePath,string FileName)
{
this.LogLevel = LogLevel.Error;
this.Msg = ex.Message;
this.FileDir = FilePath;
this.FileName = FileName;
this.AddLog();
}
private void AddLog()
{
LogLevel _LogLevel = LogLevel.Debug;
RecLogType _RecLogType = RecLogType.File;
if(this.FileDir == null || this.FileDir.Length == 0)
{
string sysPath = System.Configuration.ConfigurationSettings.AppSettings[ConfigPath];
if(sysPath != null && sysPath.Trim().Length >0)
{
this.FileDir = sysPath;
}
else
{
this.FileDir = SysFileDir;
}
}
if(this.FileName == null || this.FileName.Length == 0)
{
string sysName = System.Configuration.ConfigurationSettings.AppSettings[ConfigName];
if(sysName != null && sysName.Trim().Length >0)
{
this.FileName = sysName;
}
else
{
this.FileName = SysFileName;
}
}
if(_RecLogType == RecLogType.File)
{
if(_LogLevel == LogLevel.Debug)
{
this.Write2File();
}
else if(_LogLevel == LogLevel.Message)
{
if(this.LogLevel != LogLevel.Debug)
{
this.Write2File();
}
}
else
{
if(this.LogLevel == LogLevel.Error)
{
this.Write2File();
}
}
}
else
{
if(_LogLevel == LogLevel.Debug)
{
this.Write2EventLog();
}
else if(_LogLevel == LogLevel.Message)
{
if(this.LogLevel != LogLevel.Debug)
{
this.Write2EventLog();
}
}
else
{
if(this.LogLevel == LogLevel.Error)
{
this.Write2EventLog();
}
}
}
}
#endregion
GetLogFile#region GetLogFile
private string GetLogFile()
{
if(!System.IO.Directory.Exists(this.FileDir))
{
System.IO.Directory.CreateDirectory(this.FileDir);
}
DirectoryInfo di = new DirectoryInfo(this.FileDir);
bool flag = true;
int index = 0;
string result = string.Empty;
StringBuilder sb = new StringBuilder();
sb.Append(this.FileDir);
sb.Append(@"\");
sb.Append(System.DateTime.Now.ToString("yyyy-MM-dd"));
sb.Append(@"-");
while(flag)
{
index = index + 1;
result = sb.ToString() + index.ToString("000") + @"-" + this.FileName;
if(!System.IO.File.Exists(result))
{
StreamWriter sw = System.IO.File.CreateText(result);
sw.Close();
flag = false;
}
else
{
FileInfo fi = new FileInfo(result);
if(fi.Length < 511*1024)
{
flag = false;
}
}
}
return result;
}
#endregion
Write2File()#region Write2File()
private void Write2File()
{
try
{
string filename = this.GetLogFile();
StreamWriter w = File.AppendText(filename);
StringBuilder sb = new StringBuilder(this.Date);
sb.Append(" ");
sb.Append(this.LogLevel.ToString());
sb.Append(" ");
sb.Append(this.Msg);
w.WriteLine(sb.ToString());
w.Flush();
w.Close();
}
catch(Exception ex)
{
StreamWriter w = File.AppendText(DefaultLogFileName);
w.WriteLine(System.DateTime.Now.ToString()+" "+ex.Message);
w.Flush();
w.Close();
}
}
#endregion
Write2EventLog()#region Write2EventLog()
private void Write2EventLog()
{
if(!EventLog.SourceExists("BenQGuru.eSCM.Management"))
{
EventLog.CreateEventSource("BenQGuru.eSCM.Management","BenQGuru.eSCM.Management Log");
}
EventLogEntryType type ;
if(this.LogLevel == LogLevel.Error)
{
type = EventLogEntryType.Error;
}
else
{
type = EventLogEntryType.Information;
}
EventLog.WriteEntry("BenQGuru.eSCM.Management",this.Msg,type);
/**//* 说明如果是Windows 2000:
1. Click "Start->Run".
2. Enter "regedt32"
3. Click "Security->Permission" on the menu bar.
4. 给 "ASPNET" 赋予在下面键值上合适的权限。(如果您在ASP.NET中impersonate到其他的用户, 请合适的替换ASPNET)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
5.在machine_config文件中将 <processModel.username="asp.net">中的username改为username="system"即可(需重新启动机器)。
*/
}
#endregion
}
}
//=========================================
//Anthor : Andy Luo
//Function Description: 日志处理
//CopyRight By arping.cnblogs.net 200703
//=========================================
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
namespace Logger
{
enum#region enum
public enum LogLevel
{
Debug, Message, Error
}
public enum RecLogType
{
File,EventLog
}
#endregion
public class Logger
{
private Logger()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
protected const string SysFileDir = @"C:\Temp";
protected const string SysFileName = "Tools.log";
protected const string DefaultLogFileName = @"c:\temp\AndyLuoLogger.log";
protected const string ConfigPath = "LogPath";
protected const string ConfigName = "LogName";
Property#region Property
private string FileDir = string.Empty;
private string FileName = string.Empty;
private static Logger _instance = null;
private static Logger Instance
{
get
{
if(_instance == null)
{
_instance = new Logger();
}
return _instance;
}
}
private LogLevel _objLogLevel;
public LogLevel LogLevel
{
set{ _objLogLevel = value;}
get{ return _objLogLevel;}
}
private string _Msg;
public string Msg
{
set{ _Msg = value;}
get{ return _Msg;}
}
private string Date
{
get{ return System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");}
}
#endregion
Public NewLog#region Public NewLog
//config中指定路径
public static void NewLog(LogLevel objLogLevel,string Msg)
{
Instance.AddLog(objLogLevel,Msg);
}
public static void NewLog(System.Exception ex)
{
Instance.AddLog(ex);
}
public static void NewLog(LogLevel objLogLevel,string Msg,string FilePath,string FileName)
{
Instance.AddLog(objLogLevel,Msg,FilePath,FileName);
}
public static void NewLog(System.Exception ex,string FilePath,string FileName)
{
Instance.AddLog(ex,FilePath,FileName);
}
#endregion
AddLog()#region AddLog()
private void AddLog(LogLevel objLogLevel,string Msg)
{
this.LogLevel = objLogLevel;
this.Msg = Msg;
this.AddLog();
}
private void AddLog(LogLevel objLogLevel,string Msg,string FilePath,string FileName)
{
this.LogLevel = objLogLevel;
this.Msg = Msg;
this.FileDir = FilePath;
this.FileName = FileName;
this.AddLog();
}
private void AddLog(System.Exception ex)
{
this.LogLevel = LogLevel.Error;
this.Msg = ex.Message;
this.AddLog();
}
private void AddLog(System.Exception ex,string FilePath,string FileName)
{
this.LogLevel = LogLevel.Error;
this.Msg = ex.Message;
this.FileDir = FilePath;
this.FileName = FileName;
this.AddLog();
}
private void AddLog()
{
LogLevel _LogLevel = LogLevel.Debug;
RecLogType _RecLogType = RecLogType.File;
if(this.FileDir == null || this.FileDir.Length == 0)
{
string sysPath = System.Configuration.ConfigurationSettings.AppSettings[ConfigPath];
if(sysPath != null && sysPath.Trim().Length >0)
{
this.FileDir = sysPath;
}
else
{
this.FileDir = SysFileDir;
}
}
if(this.FileName == null || this.FileName.Length == 0)
{
string sysName = System.Configuration.ConfigurationSettings.AppSettings[ConfigName];
if(sysName != null && sysName.Trim().Length >0)
{
this.FileName = sysName;
}
else
{
this.FileName = SysFileName;
}
}
if(_RecLogType == RecLogType.File)
{
if(_LogLevel == LogLevel.Debug)
{
this.Write2File();
}
else if(_LogLevel == LogLevel.Message)
{
if(this.LogLevel != LogLevel.Debug)
{
this.Write2File();
}
}
else
{
if(this.LogLevel == LogLevel.Error)
{
this.Write2File();
}
}
}
else
{
if(_LogLevel == LogLevel.Debug)
{
this.Write2EventLog();
}
else if(_LogLevel == LogLevel.Message)
{
if(this.LogLevel != LogLevel.Debug)
{
this.Write2EventLog();
}
}
else
{
if(this.LogLevel == LogLevel.Error)
{
this.Write2EventLog();
}
}
}
}
#endregion
GetLogFile#region GetLogFile
private string GetLogFile()
{
if(!System.IO.Directory.Exists(this.FileDir))
{
System.IO.Directory.CreateDirectory(this.FileDir);
}
DirectoryInfo di = new DirectoryInfo(this.FileDir);
bool flag = true;
int index = 0;
string result = string.Empty;
StringBuilder sb = new StringBuilder();
sb.Append(this.FileDir);
sb.Append(@"\");
sb.Append(System.DateTime.Now.ToString("yyyy-MM-dd"));
sb.Append(@"-");
while(flag)
{
index = index + 1;
result = sb.ToString() + index.ToString("000") + @"-" + this.FileName;
if(!System.IO.File.Exists(result))
{
StreamWriter sw = System.IO.File.CreateText(result);
sw.Close();
flag = false;
}
else
{
FileInfo fi = new FileInfo(result);
if(fi.Length < 511*1024)
{
flag = false;
}
}
}
return result;
}
#endregion
Write2File()#region Write2File()
private void Write2File()
{
try
{
string filename = this.GetLogFile();
StreamWriter w = File.AppendText(filename);
StringBuilder sb = new StringBuilder(this.Date);
sb.Append(" ");
sb.Append(this.LogLevel.ToString());
sb.Append(" ");
sb.Append(this.Msg);
w.WriteLine(sb.ToString());
w.Flush();
w.Close();
}
catch(Exception ex)
{
StreamWriter w = File.AppendText(DefaultLogFileName);
w.WriteLine(System.DateTime.Now.ToString()+" "+ex.Message);
w.Flush();
w.Close();
}
}
#endregion
Write2EventLog()#region Write2EventLog()
private void Write2EventLog()
{
if(!EventLog.SourceExists("BenQGuru.eSCM.Management"))
{
EventLog.CreateEventSource("BenQGuru.eSCM.Management","BenQGuru.eSCM.Management Log");
}
EventLogEntryType type ;
if(this.LogLevel == LogLevel.Error)
{
type = EventLogEntryType.Error;
}
else
{
type = EventLogEntryType.Information;
}
EventLog.WriteEntry("BenQGuru.eSCM.Management",this.Msg,type);
/**//* 说明如果是Windows 2000:
1. Click "Start->Run".
2. Enter "regedt32"
3. Click "Security->Permission" on the menu bar.
4. 给 "ASPNET" 赋予在下面键值上合适的权限。(如果您在ASP.NET中impersonate到其他的用户, 请合适的替换ASPNET)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
5.在machine_config文件中将 <processModel.username="asp.net">中的username改为username="system"即可(需重新启动机器)。
*/
}
#endregion
}
}