自己写的Log记录组件
Posted 漫漫洒洒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己写的Log记录组件相关的知识,希望对你有一定的参考价值。
常规的Debug组件的封装,然后加了一个文件log,分异步和同步(可跨平台使用)。
/// <summary> /// 常用IO操作类 /// </summary> public class HIO { /// <summary> /// 控制台数据错误 /// </summary> /// <param name="ex"></param> public static void WriteConsole(Exception ex) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); Console.WriteLine("Data:" + ex.Data + Environment.NewLine + " InnerException:" + ex.InnerException + Environment.NewLine + " Message:" + ex.Message + Environment.NewLine + " Source:" + ex.Source + Environment.NewLine + " StackTrace:" + ex.StackTrace + Environment.NewLine + " TargetSite:" + ex.TargetSite); } /// <summary> /// 控制台数据错误 /// </summary> /// <param name="ex"></param> public static void WriteDebug(Exception ex) { Debug.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")); Debug.WriteLine("Data:" + ex.Data + Environment.NewLine + " InnerException:" + ex.InnerException + Environment.NewLine + " Message:" + ex.Message + Environment.NewLine + " Source:" + ex.Source + Environment.NewLine + " StackTrace:" + ex.StackTrace + Environment.NewLine + " TargetSite:" + ex.TargetSite); } /// <summary> /// 应用根目录 /// </summary> public static string AppRootPath = AppDomain.CurrentDomain.BaseDirectory;// Environment.CurrentDirectory /// <summary> /// 日志目录 /// </summary> public static string logDir = "Log"; /// <summary> /// 日志目录全路径 /// </summary> public static string logDirPath = AppRootPath + Path.DirectorySeparatorChar + logDir; /// <summary> /// 错误记录 /// </summary> /// <param name="ex"></param> public static void WriteLog(Exception ex) { WriteLog("Data:" + ex.Data + Environment.NewLine + " InnerException:" + ex.InnerException + Environment.NewLine + " Message:" + ex.Message + Environment.NewLine + " Source:" + ex.Source + Environment.NewLine + " StackTrace:" + ex.StackTrace + Environment.NewLine + " TargetSite:" + ex.TargetSite); } /// <summary> /// 写log /// </summary> /// <param name="InfoStr"></param> public static void WriteLog(string info) { WriteLog(info, logDirPath); } /// <summary> /// 写log(自动时间log) /// </summary> /// <param name="InfoStr">内容</param> /// <param name="FilePath">目录地址</param> public static void WriteLog(string info, string DirPath) { FileStream stream = null; System.IO.StreamWriter writer = null; try { if (Directory.Exists(DirPath) == false) { Directory.CreateDirectory(DirPath); } string dateDir = DateTime.Now.ToString("yyyyMMdd"); if (!Directory.Exists(DirPath + Path.DirectorySeparatorChar + dateDir)) { Directory.CreateDirectory(DirPath + Path.DirectorySeparatorChar + dateDir); } string logFilePath = DirPath + Path.DirectorySeparatorChar + dateDir + Path.DirectorySeparatorChar + "SyncLog_" + DateTime.Now.ToString("yyyyMMddHH") + ".txt"; if (File.Exists(logFilePath) == false) { stream = new FileStream(logFilePath, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite); } else { stream = new FileStream(logFilePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); } writer = new System.IO.StreamWriter(stream); writer.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); writer.WriteLine(info); } finally { if (writer != null) { writer.Close(); writer.Dispose(); } if (stream != null) { stream.Close(); stream.Dispose(); } } } /// <summary> /// 异步写log /// </summary> /// <param name="info"></param> public static void AsyncWriteLog(string info) { AsyncWriteLog(info, Encoding.UTF8, logDirPath); } /// <summary> /// 异步写log /// </summary> /// <param name="ex"></param> public static void AsyncWriteLog(Exception ex) { AsyncWriteLog("Data:" + ex.Data + Environment.NewLine + " InnerException:" + ex.InnerException + Environment.NewLine + " Message:" + ex.Message + Environment.NewLine + " Source:" + ex.Source + Environment.NewLine + " StackTrace:" + ex.StackTrace + Environment.NewLine + " TargetSite:" + ex.TargetSite, Encoding.UTF8, logDirPath); } /// <summary> /// 异步写log /// </summary> /// <param name="info"></param> /// <param name="encode"></param> /// <param name="FilePath"></param> public static void AsyncWriteLog(string info, Encoding encode, string FileDirPath) { AsyncWriteLog(encode.GetBytes(info), FileDirPath); } /// <summary> /// 异步写log /// </summary> /// <param name="datagram">要写入当前流的数据的缓冲区</param> /// <param name="FilePath"></param> public static void AsyncWriteLog(byte[] datagram, string FileDirPath) { AsyncWriteLog(datagram, datagram.Length, FileDirPath, (obj) => { AsyncResult ar = obj as AsyncResult; FileStream stream = ar.AsyncState as FileStream; if (stream != null) { stream.Close(); stream.Dispose(); } }); } /// <summary> /// 异步写log /// </summary> /// <param name="datagram">要写入当前流的数据的缓冲区</param> /// <param name="numBytes">最多写入的字节数</param> /// <param name="FilePath"></param> /// <param name="callback"></param> public static void AsyncWriteLog(byte[] datagram, int numBytes, string FileDirPath, AsyncCallback callback) { if (datagram.Length == 0) { throw new Exception("数据为0"); } if (numBytes == 0) { throw new Exception("写入数为0"); } if (string.IsNullOrEmpty(FileDirPath)) { throw new Exception("文件地址为空"); } if (!Directory.Exists(FileDirPath)) { Directory.CreateDirectory(FileDirPath); } string dateDir = DateTime.Now.ToString("yyyyMMdd"); if (!Directory.Exists(FileDirPath + Path.DirectorySeparatorChar + dateDir)) { Directory.CreateDirectory(FileDirPath + Path.DirectorySeparatorChar + dateDir); } string logFilePath = FileDirPath + Path.DirectorySeparatorChar + dateDir + Path.DirectorySeparatorChar + "AsyncLog_" + DateTime.Now.ToString("yyyyMMddHH") + ".txt"; FileStream stream = null; try { if (File.Exists(logFilePath) == false) { stream = new FileStream(logFilePath, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite); } else { stream = new FileStream(logFilePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); } if (stream.CanWrite) { stream.BeginWrite(datagram, 0, numBytes, callback, stream); } else { throw new Exception("文件无法写入,文件或只读!"); } } catch (Exception ex) { WriteDebug(ex); } } /// <summary> /// 文本转义(方便讲文本转换成C#变量代码) /// 例子 " 转化成 string str="\""; /// </summary> /// <param name="str"></param> /// <returns></returns> public static string ToEscape(string str, string m_var) { /* " \" \ \ */ str = str.Trim(); str = str.Replace("\\", "\\\\"); str = str.Replace("\"", "\\\""); return "string " + m_var + "=\"" + str + "\";"; } /// <summary> /// (递归)去掉所有首部出现的字符串 /// </summary> /// <param name="str">源字符串</param> /// <param name="headStr">首部出现的字符串</param> /// <returns></returns> public static string RemoveHead(string str, string headStr) { if (str.StartsWith(headStr)) { str = str.Remove(0, headStr.Length); return RemoveHead(str, headStr); } else { return str; } } /// <summary> /// 路径解析转换,转化成符合当前系统的路径符号 /// </summary> /// <param name="path">路径</param> /// <param name="flag">(路径的类型)1:windows \ 2:linux /(linux和web网页的分隔相符)</param> /// <param name="dHear">是否去掉首部的路径分隔符</param> /// <returns></returns> public static string PathParse(string path, int flag, bool dHear) { string win = @"\"; string linux = @"/"; string sys = Path.DirectorySeparatorChar.ToString(); if (flag == 1) { path = path.Replace(win, sys); } else if (flag == 2) { path = path.Replace(linux, sys); } if (dHear) { path = RemoveHead(path, sys); } return path; } /// <summary> /// web路径地址转换为系统路径 /// </summary> /// <param name="appPath">应用路径</param> /// <param name="webPath">web路径</param> /// <param name="dHear">是否去掉首部的路径分隔符</param> /// <returns></returns> public static string SysPathParse(string appPath, string webPath, bool dHear) { string sys = Path.DirectorySeparatorChar.ToString(); string web = @"/";//web的分隔符 webPath = webPath.Replace(web, sys); if (dHear) { webPath = RemoveHead(webPath, sys); } string result = ""; if (appPath.EndsWith(sys)) { if (webPath.StartsWith(sys)) { result = appPath + webPath.Remove(0, 1); } else { result = appPath + webPath; } } else { if (webPath.StartsWith(sys)) { result = appPath + webPath; } else { result = appPath + sys + webPath; } } return result; } public static string WebPathParse(string fullPath, string appPath, bool dHear) { string sys = Path.DirectorySeparatorChar.ToString(); string web = @"/";//web的分隔符 if (fullPath.StartsWith(appPath)) { string webPath = fullPath.Remove(0, appPath.Length); webPath = webPath.Replace(sys, web); if (webPath.StartsWith(web) == false) { webPath = web + webPath; } if (dHear) { webPath = RemoveHead(webPath, web); } return webPath; } else { return ""; } } }
以上是关于自己写的Log记录组件的主要内容,如果未能解决你的问题,请参考以下文章
js dom一些操作,记录一下自己写的没有意义,可以简略翻过 第八章