通用的日志处理类(分享)

来源:互联网 发布:网络游戏挂机软件 编辑:程序博客网 时间:2024/06/05 02:56
//=========================================
//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;}
            
getreturn _objLogLevel;}
        }


        
private string _Msg;
        
public string Msg
        
{
            
set{ _Msg = value;}
            
getreturn _Msg;}
        }


        
private string Date
        
{
            
getreturn 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

 

    }
}