您的位置:首页 > 其它

.net生成日志处理,记录产生,异常的模块,进程号,线程号:

2008-05-08 16:52 513 查看

using System;


using System.Collections.Generic;


using System.Text;


using System.IO;


using System.Xml;


using System.Threading;


using System.Windows.Forms;






namespace Tigerleq.Log




...{


public class LogOperate




...{


// Fields


private const string APPERREXCEPTIONTYPENAME = "Common.Exception.AppErrException";


private FileStream m_fileStreamLog;


private int m_iSleepTime;


private int m_iTempTryCnt;


private int m_iTryCnt;


private string m_sFile;


private string m_sMainPath;


private string m_sPath;


private string m_sTime;


private string m_sXmlLog;




// Methods


public LogOperate()




...{


this.m_sMainPath = Application.StartupPath + @"logApp";


this.m_iSleepTime = 200;


this.m_iTryCnt = 10;


this.m_iTempTryCnt = 10;


this.m_sPath = "";


this.m_sFile = "";


this.m_sTime = "";


this.m_fileStreamLog = null;


this.m_sXmlLog = null;


}




public LogOperate(string p_sDirectory)




...{


this.m_sMainPath = Application.StartupPath + @"logApp";


this.m_iSleepTime = 200;


this.m_iTryCnt = 10;


this.m_iTempTryCnt = 10;


this.m_sPath = "";


this.m_sFile = "";


this.m_sTime = "";


this.m_fileStreamLog = null;


this.m_sXmlLog = null;


if ((p_sDirectory != null) && !(p_sDirectory == ""))




...{


this.m_sMainPath = Application.StartupPath + @"log" + p_sDirectory.Trim() + @"";


}


}




public void Init(XmlNode p_nd)




...{


try




...{


this.m_sMainPath = @"." + p_nd.SelectSingleNode("MainPath").Value.Trim() + @"";


this.m_iSleepTime = int.Parse(p_nd.SelectSingleNode("SleepTime").Value);


this.m_iTryCnt = int.Parse(p_nd.SelectSingleNode("TryCnt").Value);


this.m_iTempTryCnt = int.Parse(p_nd.SelectSingleNode("TempTryCnt").Value);


}


catch




...{


}


}




private FileStream OpenLog(string p_sPathFile)




...{


FileStream stream2;


try




...{


bool flag;


int num = 0;


goto Label_003F;


Label_0006: ;


try




...{


return new FileStream(p_sPathFile, FileMode.Append, FileAccess.Write, FileShare.Read);


}


catch (IOException)




...{


num++;


if (num >= this.m_iTryCnt)




...{


return null;


}


Thread.Sleep(this.m_iSleepTime);


}


Label_003F:


flag = true;


goto Label_0006;


}


catch (Exception)




...{


stream2 = null;


}


return stream2;


}




private FileStream OpenTempLog(string p_sPath, string p_sTime)




...{


FileStream stream2;


try




...{


bool flag;


int num = 0;


DateTime time = DateTime.Parse(p_sTime);


string str = time.Year.ToString() + time.Month.ToString("0#") + time.Day.ToString("0#") + time.Hour.ToString("0#") + time.Minute.ToString("0#") + time.Second.ToString("0#");


goto Label_017A;


Label_00B1: ;


try




...{


return new FileStream(p_sPath + str + "-" + num.ToString() + ".log", FileMode.Append, FileAccess.Write, FileShare.Read);


}


catch (IOException exception)




...{


num++;


if (num >= this.m_iTempTryCnt)




...{


MessageBox.Show((("多次尝试打开临时日志文件,依然失败 " + exception.Message) + " " + exception.ToString()) + " " + exception.StackTrace);


return null;


}


}


Label_017A:


flag = true;


goto Label_00B1;


}


catch (Exception)




...{


stream2 = null;


}


return stream2;


}




public void OperateExp(Exception p_ex)




...{


LogErr logErr = new LogErr(p_ex, "未知错误");


Write(logErr);


logErr.Dispose();


}




public void OperateExp(Exception p_ex, string p_sAddMsg, string p_sShowMsg)




...{


LogErr logErr = new LogErr(p_ex, "p_sAddMsg");


Write(logErr);


logErr.Dispose();


}




public void Write(LogBase p_log)




...{


try




...{


string str = "";


MemoryStream stream = new MemoryStream();


StreamReader reader = new StreamReader(stream, Encoding.Default);


string str2 = null;


XmlTextWriter writer = new XmlTextWriter(stream, Encoding.Default);


this.m_sPath = this.m_sMainPath + DateTime.Parse(p_log.Time).Year.ToString() + DateTime.Parse(p_log.Time).Month.ToString("0#") + @"";


Directory.CreateDirectory(this.m_sPath);


this.m_sFile = DateTime.Parse(p_log.Time).Year.ToString() + DateTime.Parse(p_log.Time).Month.ToString("0#") + DateTime.Parse(p_log.Time).Day.ToString("0#") + ".log";


str = this.m_sPath + this.m_sFile;


writer.Formatting = Formatting.Indented;


string fullName = p_log.GetType().FullName;


string localName = fullName.Substring(fullName.LastIndexOf(".") + 1).Trim();


writer.WriteStartElement(localName);


writer.WriteElementString("Time", p_log.Time);


writer.WriteElementString("ProcessID", p_log.ProcessID.ToString());


writer.WriteElementString("ThreadID", p_log.ThreadID.ToString());


writer.WriteElementString("AddMsg", p_log.AddMsg);


switch (localName)




...{


case "LogInfo":


writer.WriteElementString("Info", ((LogInfo)p_log).Info);


break;




case "LogWarn":


writer.WriteElementString("Warn", ((LogWarn)p_log).Warn);


writer.WriteElementString("StackTrace", ((LogWarn)p_log).stackTrace.ToString());


break;




case "LogErr":


writer.WriteElementString("Message", ((LogErr)p_log).Message);


writer.WriteElementString("ExceptionStackTrace", ((LogErr)p_log).ExceptionStackTrace);


writer.WriteElementString("ExceptionStr", ((LogErr)p_log).ExceptionStr);


writer.WriteElementString("Source", ((LogErr)p_log).Source);


writer.WriteElementString("StackTrace", ((LogErr)p_log).StackTrace);


break;


}


writer.WriteEndElement();


writer.Flush();


reader.BaseStream.Seek(0L, SeekOrigin.Begin);


str2 = reader.ReadToEnd();


str2 = " " + str2 + " ";


writer.Close();


reader.Close();


stream.Close();


this.m_sTime = p_log.Time;


this.m_sXmlLog = str2;


new Thread(new ThreadStart(this.WriteToFile)).Start();


}


catch (Exception exception)




...{


throw exception;


}


}




public void WriteExp(Exception p_ex)




...{


LogErr err = new LogErr(p_ex, "");


this.Write(err);


}




private void WriteToFile()




...{


string str = this.m_sPath + this.m_sFile;


this.m_fileStreamLog = this.OpenLog(str);


if (this.m_fileStreamLog == null)




...{


this.m_fileStreamLog = this.OpenTempLog(this.m_sPath, this.m_sTime);


}


if (this.m_fileStreamLog != null)




...{


StreamWriter writer = new StreamWriter(this.m_fileStreamLog, Encoding.Default);


writer.Write(this.m_sXmlLog);


writer.Close();


this.m_fileStreamLog.Close();


}


}


}






}



基类


using System;


using System.Collections.Generic;


using System.Text;


using System.Diagnostics;


using System.Windows.Forms;


using System.ComponentModel;








namespace Tigerleq.Log




...{


public abstract class LogBase : IDisposable




...{








// Pointer to an external unmanaged resource.


private IntPtr handle;


// Other managed resource this class uses.


private Component Components;


// Track whether Dispose has been called.


private bool disposed = false;




// Implement IDisposable.


// Do not make this method virtual.


// A derived class should not be able to override this method.


public void Dispose()




...{


Dispose(true);


// Take yourself off the Finalization queue


// to prevent finalization code for this object


// from executing a second time.


GC.SuppressFinalize(this);


}




// Dispose(bool disposing) executes in two distinct scenarios.


// If disposing equals true, the method has been called directly


// or indirectly by a user's code. Managed and unmanaged resources


// can be disposed.


// If disposing equals false, the method has been called by the


// runtime from inside the finalizer and you should not reference


// other objects. Only unmanaged resources can be disposed.




protected virtual void Dispose(bool disposing)




...{


// Check to see if Dispose has already been called.


if (!this.disposed)




...{


// If disposing equals true, dispose all managed


// and unmanaged resources.


if (disposing)




...{


// Dispose managed resources.


Components.Dispose();


}


// Release unmanaged resources. If disposing is false,


// only the following code is executed.


CloseHandle(handle);


handle = IntPtr.Zero;


// Note that this is not thread safe.


// Another thread could start disposing the object


// after the managed resources are disposed,


// but before the disposed flag is set to true.


// If thread safety is necessary, it must be


// implemented by the client.




}


disposed = true;


}




// Use C# destructor syntax for finalization code.


// This destructor will run only if the Dispose method


// does not get called.


// It gives your base class the opportunity to finalize.


// Do not provide destructors in types derived from this class.


~LogBase()




...{


// Do not re-create Dispose clean-up code here.


// Calling Dispose(false) is optimal in terms of


// readability and maintainability.


Dispose(false);


}






// Fields






/**//// <summary>


///


/// </summary>


/// <param name="hObject"> handle to object</param>


/// <returns></returns>


[System.Runtime.InteropServices.DllImport("kernel32.dll")]


private static extern bool CloseHandle(IntPtr hObject);






protected string m_AddMsg;


protected int m_iProcessID;


protected int m_iThreadID;


protected string m_sTime;




// Methods


public LogBase()




...{


this.m_iProcessID = -1;


this.m_iThreadID = -1;


this.m_sTime = null;


this.m_AddMsg = null;


}




public LogBase(string p_sAddMsg)




...{


this.m_iProcessID = -1;


this.m_iThreadID = -1;


this.m_sTime = null;


this.m_AddMsg = null;


this.m_AddMsg = p_sAddMsg.Trim();


this.m_sTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");


this.m_iProcessID = Process.GetCurrentProcess().Id;


this.m_iThreadID = AppDomain.GetCurrentThreadId();


}




// Properties


public string AddMsg




...{


get




...{


return this.m_AddMsg;


}


}




public int ProcessID




...{


get




...{


return this.m_iProcessID;


}


}




public int ThreadID




...{


get




...{


return this.m_iThreadID;


}


}




public string Time




...{


get




...{


return this.m_sTime;


}


}


}






}




using System;


using System.Collections.Generic;


using System.Text;


using System.Diagnostics;


using System.Security;


using System.Windows.Forms;




namespace Tigerleq.Log




...{


public class LogErr : LogBase




...{


// Fields


private string m_sExceptionStackTrace;


private string m_sExceptionStr;


private string m_sMessage;


private string m_sOtherMessage;


private string m_sSource;


private string m_sStackTrace;




// Methods


public LogErr()




...{


this.m_sMessage = null;


this.m_sOtherMessage = "";


this.m_sExceptionStackTrace = null;


this.m_sExceptionStr = null;


this.m_sSource = null;


this.m_sStackTrace = null;


}




public LogErr(Exception p_ex, string p_sAddMsg)


: base(p_sAddMsg)




...{


this.m_sMessage = null;


this.m_sOtherMessage = "";


this.m_sExceptionStackTrace = null;


this.m_sExceptionStr = null;


this.m_sSource = null;


this.m_sStackTrace = null;


this.m_sMessage = p_ex.Message;


this.m_sExceptionStackTrace = p_ex.StackTrace;


this.m_sExceptionStr = p_ex.ToString();


this.m_sSource = p_ex.Source;


this.m_sStackTrace = new StackTrace().ToString();


if (p_ex is ArgumentException)




...{


this.m_sOtherMessage = this.m_sOtherMessage + "相关参数:" + ((ArgumentException)p_ex).ParamName;


}


if (p_ex is SecurityException)




...{


this.m_sOtherMessage = this.m_sOtherMessage + "权限状态:" + ((SecurityException)p_ex).PermissionState;


}


}




// Properties


public string ExceptionStackTrace




...{


get




...{


return this.m_sExceptionStackTrace;


}


}




public string ExceptionStr




...{


get




...{


return this.m_sExceptionStr;


}


}




public string Message




...{


get




...{


return this.m_sMessage;


}


}




public string OtherMessage




...{


get




...{


return this.m_sOtherMessage;


}


}




public string Source




...{


get




...{


return this.m_sSource;


}


}




public string StackTrace




...{


get




...{


return this.m_sStackTrace;


}


}








/**//// <summary>


/// 清理所有正在使用的资源。


/// </summary>


/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>


protected override void Dispose(bool disposing)




...{


base.Dispose(disposing);


}


}






}




using System;


using System.Collections.Generic;


using System.Text;


using System.Windows.Forms;




namespace Tigerleq.Log




...{


public class LogInfo : LogBase




...{


// Fields


private string m_sInfo;




// Methods


public LogInfo()




...{


this.m_sInfo = null;


}




public LogInfo(string p_sInfo, string p_sAddMsg)


: base(p_sAddMsg)




...{


this.m_sInfo = null;


this.m_sInfo = p_sInfo.Trim();


}




// Properties


public string Info




...{


get




...{


return this.m_sInfo;


}


}








/**//// <summary>


/// 清理所有正在使用的资源。


/// </summary>


/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>


protected override void Dispose(bool disposing)




...{


base.Dispose(disposing);


}


}








}




using System;


using System.Collections.Generic;


using System.Text;


using System.Diagnostics;


using System.Windows.Forms;




namespace Tigerleq.Log




...{


public class LogWarn : LogBase




...{


// Fields


private string m_sStackTrace;


private string m_sWarn;




// Methods


public LogWarn()




...{


this.m_sWarn = null;


this.m_sStackTrace = null;


}




public LogWarn(string p_sWarn, string p_sAddMsg)


: base(p_sAddMsg)




...{


this.m_sWarn = null;


this.m_sStackTrace = null;


this.m_sWarn = p_sWarn.Trim();


this.m_sStackTrace = new StackTrace().ToString();


}




// Properties


public string stackTrace




...{


get




...{


return this.m_sStackTrace;


}


}




public string Warn




...{


get




...{


return this.m_sWarn;


}


}








/**//// <summary>


/// 清理所有正在使用的资源。


/// </summary>


/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>


protected override void Dispose(bool disposing)




...{


base.Dispose(disposing);


}


}






}




using System;


using System.Collections.Generic;


using System.Text;




namespace Tigerleq.Log




...{


public class LogWrite




...{


// Methods


public LogWrite(string p_sDir, Exception p_ex)


: this(p_sDir, p_ex, "")




...{


}




public LogWrite(string p_sDir, Exception p_ex, string p_sAddMsg)




...{


LogErr err = new LogErr(p_ex, p_sAddMsg);


new LogOperate(p_sDir).Write(err);


}




public LogWrite(string p_sDir, string p_sLogType, string p_sLog)


: this(p_sDir, p_sLogType, p_sLog, "")




...{


}




public LogWrite(string p_sDir, string p_sLogType, string p_sLog, string p_sAddMsg)




...{


LogOperate operate = new LogOperate(p_sDir);


if (p_sLogType.Trim().ToLower().Equals("info"))




...{


LogInfo info = new LogInfo(p_sLog, p_sAddMsg);


operate.Write(info);


}


else




...{


LogWarn warn = new LogWarn(p_sLog, p_sAddMsg);


operate.Write(warn);


}


}


}








}



产生的日志文件

效果为


<LogInfo>


<Time>2008-05-08 01:00:01</Time>


<ProcessID>864</ProcessID>


<ThreadID>816</ThreadID>


<AddMsg />


<Info>开始将服务加载到内存</Info>


</LogInfo>




<LogErr>


<Time>2008-05-08 01:00:01</Time>


<ProcessID>864</ProcessID>


<ThreadID>816</ThreadID>


<AddMsg>p_sAddMsg</AddMsg>


<Message>未能找到路径“E:代码资料C#Tiger'sControlLibraryWindowsServiceinDebugConfigServerConfig.xml”的一部分。</Message>


<ExceptionStackTrace> 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)


在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)


在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)


在 System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)


在 System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)


在 System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)


在 System.Threading.CompressedStack.runTryCode(Object userData)


在 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)


在 System.Threading.CompressedStack.Run(CompressedStack compressedStack, ContextCallback callback, Object state)


在 System.Xml.XmlTextReaderImpl.OpenUrl()


在 System.Xml.XmlTextReaderImpl.Read()


在 System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)


在 System.Xml.XmlDocument.Load(XmlReader reader)


在 System.Xml.XmlDocument.Load(String filename)


在 Tigerleq.ServerConfig.ServerParas..ctor(String p_sFile) 位置 E:代码资料C#Tiger'sControlLibraryTiger'sClassLibraryServerConfigServerParas.cs:行号 49</ExceptionStackTrace>


<ExceptionStr>System.IO.DirectoryNotFoundException: 未能找到路径“E:代码资料C#Tiger'sControlLibraryWindowsServiceinDebugConfigServerConfig.xml”的一部分。


在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)


在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)


在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)


在 System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)


在 System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)


在 System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)


在 System.Threading.CompressedStack.runTryCode(Object userData)


在 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)


在 System.Threading.CompressedStack.Run(CompressedStack compressedStack, ContextCallback callback, Object state)


在 System.Xml.XmlTextReaderImpl.OpenUrl()


在 System.Xml.XmlTextReaderImpl.Read()


在 System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)


在 System.Xml.XmlDocument.Load(XmlReader reader)


在 System.Xml.XmlDocument.Load(String filename)


在 Tigerleq.ServerConfig.ServerParas..ctor(String p_sFile) 位置 E:代码资料C#Tiger'sControlLibraryTiger'sClassLibraryServerConfigServerParas.cs:行号 49</ExceptionStr>


<Source>mscorlib</Source>


<StackTrace> 在 Tigerleq.Log.LogErr..ctor(Exception p_ex, String p_sAddMsg)


在 Tigerleq.Log.LogOperate.OperateExp(Exception p_ex, String p_sAddMsg, String p_sShowMsg)


在 Tigerleq.ServerConfig.ServerParas..ctor(String p_sFile)


在 WindowsService.MainService..ctor()


在 WindowsService.Program.Main(String[] args)


</StackTrace>


</LogErr>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐