常规的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记录组件的更多相关文章

  1. 在.txt文件的首行写上.LOG后,后面每次对改文本文件进行编辑后,系统会自动在编辑内容后记录操作时间

    在.txt文件的首行写上.LOG后,后面每次对改文本文件进行编辑后,系统会自动在编辑内容后记录操作时间

  2. log4net--不可多得的开源日志记录组件

    log4net--不可多得的开源日志记录组件 1 前奏 一直在用log4net日志工具,却没时间写个日志给大家分享一下这个工具,趁最近比较空些,好好分享一下这个工具. 2 说明 Log4net介绍就不 ...

  3. 日志记录组件[Log4net]详细介绍

    转载:http://www.cnblogs.com/liwei6797/archive/2007/04/27/729679.html 因为工作中有要用到Log记录,找到一篇不错的文章,就转了过来. 一 ...

  4. 【干货】.NET开发通用组件发布(四) 日志记录组件

    组件介绍和合作开发 http://www.cnblogs.com/MrHuo/p/MrHuoControls.html 日志记录组件功能介绍 通过基类Logger,实现了文本记录日志和数据库记录日志两 ...

  5. C# 程序A发送Log记录给程序B,程序B处理和分析Log记录

    C# 程序A发送Log记录给程序B,程序B处理和分析Log记录 关键字:C# ;Log记录 ;在线Log记录;Socket:httplistener 一.常用场景 1. APP开发,在真机或者虚拟机上 ...

  6. HDFS namenode 写edit log原理以及源码分析

    这篇分析一下namenode 写edit log的过程. 关于namenode日志,集群做了如下配置 <property> <name>dfs.nameservices< ...

  7. php 写内容到文件,把日志写到log文件

    php 写内容到文件,把日志写到log文件 <?php header("Content-type: text/html; charset=utf-8"); /******** ...

  8. 快速php日志,写内容到文件,把日志写到log文件

    php 写内容到文件,把日志写到log文件 //记录日志:要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个.log.txt位置在项目的根目录下. $file = 'log.txt' ...

  9. IIS 高并发导致log记录不完全

    项目测试性能过程中,对于高并发测试过程中发现log记录缺失一部分,经过调查,找到了原因是因为IIS连接数的限制,经过修改连接数,成功完成.设置如下: “点击网站”->“右击切换到功能视图”-&g ...

随机推荐

  1. bzoj 2142 礼物——扩展lucas模板

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2142 没给P的范围,但说 pi ^ ci<=1e5,一看就是扩展lucas. 学习材料 ...

  2. 蓝桥杯 算法训练 ALGO-142 P1103

    算法训练 P1103   时间限制:1.0s   内存限制:256.0MB 编程实现两个复数的运算.设有两个复数 和 ,则他们的运算公式为: 要求:(1)定义一个结构体类型来描述复数. (2)复数之间 ...

  3. openwrt 按下回车才能显示图标信息

    如题所示,openwrt启动后,手动才能按下系统图标和信息. 如何却掉这个手动选项呢? 修改文件/SISP-L26.7.8-OpenWrt/build_dir/target-arm_uClibc-0. ...

  4. L2-013. 红色警报(dfs)

    L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...

  5. Maven的Snapshot版本与Release版本

    1. Snapshot版本代表不稳定.尚处于开发中的版本 2. Release版本则代表稳定的版本 3. 什么情况下该用SNAPSHOT? 协同开发时,如果A依赖构件B,由于B会更新,B应该使用SNA ...

  6. C#字符串全排序

    排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 ...

  7. iphone配置实用工具iPhone Configuration Utility

    下载地址 http://support.apple.com/kb/DL1466 安装完毕后,在设备->控制台,可以很方便看到报错信息

  8. win 7命令行大全

    一.win+(X) 其中win不会不知道吧,X为代码! Win+L 锁定当前用户. Win+E 资源管理器. Win+R 运行. Win+G (Gadgets)顺序切换边栏小工具. Win+U    ...

  9. for xml path 按分类合并行数据

    ) as itemnum FROM ( SELECT Sonum, (SELECT ItemNum+',' FROM testtb    WHERE Sonum=A.Sonum    FOR XML  ...

  10. startactivityforresult使用

    与startactivity基本相同,不过需要传入(intent,int)第二个int为请求ID,用来识别 在该activity中还应该重写nActivityResult(int requestCod ...