C#日志记录
来源:互联网 发布:复杂java程序代码 编辑:程序博客网 时间:2024/06/06 04:28
/// <summary>
/// 接口类 TCP的通信日志处理
/// </summary>
public class ShowInfo
{
public delegate void WriteTView(string str);
private WriteTView _myViewWrite;
public delegate void WriteTLog(object str);
private WriteTLog _myLogWrite;
/// <summary>
/// 构造
/// </summary>
public ShowInfo()
{
_myViewWrite = WriteDemo;
_myLogWrite = LogManager.LogRunInfo;
}
/// <summary>
/// 构造
/// </summary>
/// <param name="write"></param>
public ShowInfo(WriteTView write)
{
_myViewWrite = write;
_myLogWrite = LogManager.LogRunInfo;
}
/// <summary>
/// 显示的demo
/// </summary>
/// <param name="str"></param>
private void WriteDemo(string str)
{
Trace.WriteLine(str);
}
/// <summary>
/// 设置显示的回调函数
/// </summary>
/// <param name="write"></param>
public void SetViewWrite(WriteTView write)
{
_myViewWrite = write;
}
/// <summary>
/// 设置记录的回调函数
/// </summary>
/// <param name="write"></param>
public void SetLogWrite(WriteTLog write)
{
_myLogWrite = write;
}
/// <summary>
/// 显示
/// </summary>
/// <param name="obj"></param>
public void WriteView(object obj)
{
if (obj is Exception)
{
_myLogWrite(obj);
}
else if (obj is string)
{
_myViewWrite(obj as string);
}
}
/// <summary>
/// 记录到日志文件中
/// </summary>
/// <param name="str"></param>
public void WriteToLog(object obj)
{
if (_myLogWrite != null)
{
_myLogWrite(obj);
}
}
/// <summary>
/// 记录到日志文件中
/// </summary>
/// <param name="condition"></param>
/// <param name="str"></param>
public void WriteToLog(bool condition, object obj)
{
if (condition)
{
if (_myLogWrite != null)
{
_myLogWrite(obj);
}
}
}
#region 输出
/// <summary>
/// 显示
/// </summary>
/// <param name="format"></param>
/// <param name="arg"></param>
public void WriteToView(string format, params Object[] arg)
{
string str = String.Format(format, arg);
WriteView(str);
}
/// <summary>
/// 满足条件方可显示或记录
/// </summary>
/// <param name="condition">输出条件</param>
/// <param name="str">要输出的输出字符串</param>
/// <param name="isWriteLog">是否记录到日志文件</param>
/// <param name="isWriteView">是否显示</param>
public void WriteToView(bool condition, string str, bool isWriteLog, bool isWriteView)
{
if (condition)
{
if (isWriteView)
{
WriteView(str);
}
if (isWriteLog)
{
WriteToLog(str);
}
}
}
/// <summary>
/// 满足条件方可记录,不显示
/// </summary>
/// <param name="condition">输出条件</param>
/// <param name="str">要输出的输出字符串</param>
public void WriteToView(bool condition, string str)
{
WriteToView(condition, str, true, false);
}
/// <summary>
/// 满足条件方可记录,并标记是否显示
/// </summary>
/// <param name="condition">输出条件</param>
/// <param name="str">要输出的输出字符串</param>
/// <param name="isWriteView">是否显示</param>
public void WriteToView(bool condition, string str, bool isWriteView)
{
WriteToView(condition, str, true, isWriteView);
}
/// <summary>
/// 显示或记录
/// </summary>
/// <param name="str"></param>
/// <param name="isWriteLog"></param>
public void WriteToView(string str, bool isWriteLog, bool isWriteView)
{
WriteToView(true, str, isWriteLog, isWriteView);
}
/// <summary>
///显示,并标记是否记录
/// </summary>
/// <param name="str"></param>
/// <param name="isWriteLog"></param>
public void WriteToView(string str, bool isWriteLog)
{
WriteToView(true, str, isWriteLog, true);
}
/// <summary>
/// 显示并记录
/// </summary>
/// <param name="info"></param>
public void WriteToView(string info)
{
WriteToView(true, info, true, true);
}
/// <summary>
/// 记录,并标记是否显示
/// </summary>
/// <param name="str"></param>
/// <param name="isWriteLog"></param>
public void WriteToLog(string str, bool isWriteView)
{
WriteToView(true, str, true, isWriteView);
}
#endregion
}
/// <summary>
/// 日志记录
/// </summary>
public static class LogManager
{
/// <summary>
/// 文件夹名称
/// </summary>
public static string FolderName = "Log";
/// <summary>
/// 当前进程的ID
/// </summary>
public static string ID = Process.GetCurrentProcess().Id.ToString();
/// <summary>
/// 当天日志的个数
/// </summary>
private static int LogIndex = 1;
/// <summary>
/// 当天异常日志的个数
/// </summary>
private static int ExIndex = 1;
/// <summary>
/// 记录日志的线程锁
/// </summary>
private static object LOCKER_LOG = new object();
/// <summary>
/// 记录异常的线程锁
/// </summary>
private static object LOCKER_EX = new object();
/// <summary>
/// 记录运行日志
/// </summary>
/// <param name="msg">日志内容</param>
//[MethodImpl(MethodImplOptions.Synchronized)]
public static void LogRunInfo(string msg)
{
lock (LOCKER_LOG)
{
string path;
string file;
try
{
path = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase
, "LOG\\" + FolderName, DateTime.Now.Year.ToString(), DateTime.Now.Month.ToString());
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
var name = string.Format("{0}_{1}_{2}", FolderName, ID, DateTime.Now.ToString("yyyyMMdd"));
file = string.Format("{0}.log", name);
var pathName = Path.Combine(path, file);
FileInfo fi = new FileInfo(pathName);
if (fi.Exists)
{
while (fi.Exists
&& fi.Length > 50 * 1024 * 1024)//50MB
{
file = string.Format("{0}_{1}.log", name, LogIndex);
pathName = Path.Combine(path, file);
fi = new FileInfo(pathName);
if (!fi.Exists)
{
break;
}
else if (fi.Length > 50 * 1024 * 1024)
{
//当前日志大于50MB
LogIndex++;
}
}
}
else
{
LogIndex = 1;
}
using (StreamWriter sw = new StreamWriter(pathName, true))
{
sw.WriteLine(string.Format("{0} {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), msg));
sw.Dispose();
sw.Close();
}
}
catch
{
}
}
}
/// <summary>
/// 记录异常日志
/// </summary>
/// <param name="ex">获取的异常</param>
//[MethodImpl(MethodImplOptions.Synchronized)]
public static void LogRunInfo(Exception ex)
{
lock (LOCKER_EX)
{
string path;
string file;
try
{
//如果日志文件为空,则默认在Debug目录下新建 YYYY-mm-dd_Log.log文件
path = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "LOG\\" + FolderName);
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
var name = string.Format("{0}_Err_{1}", FolderName, DateTime.Now.ToString("yyyyMMdd"));
file = string.Format("{0}.log", name);
var pathName = Path.Combine(path, file);
FileInfo fi = new FileInfo(pathName);
if (fi.Exists)
{
while (fi.Exists
&& fi.Length > 50 * 1024 * 1024)//50MB
{
file = string.Format("{0}_{1}.log", name, ExIndex);
pathName = Path.Combine(path, file);
fi = new FileInfo(pathName);
if (!fi.Exists)
{
break;
}
else if (fi.Length > 50 * 1024 * 1024)
{
ExIndex++;
}
}
}
else
{
ExIndex = 1;
}
//把异常信息输出到文件
using (StreamWriter fs = new StreamWriter(pathName, true))
{
fs.WriteLine("-------------------------------------------------------------");
fs.WriteLine("当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
fs.WriteLine("异常信息:" + ex.Message);
fs.WriteLine("异常对象:" + ex.Source);
fs.WriteLine("调用堆栈:\n" + ex.StackTrace.Trim());
fs.WriteLine("触发方法:" + ex.TargetSite);
fs.WriteLine("-------------------------------------------------------------");
fs.WriteLine();
fs.Dispose();
fs.Close();
}
}
catch
{
}
}
}
/// <summary>
/// 记录日志
/// </summary>
/// <param name="obj"></param>
public static void LogRunInfo(object obj)
{
if (obj is Exception)
{
LogManager.LogRunInfo(obj as Exception);
}
if (obj is string)
{
LogManager.LogRunInfo(obj as string);
}
}
}
/// <summary>
/// 接口指针
/// </summary>
public class IWriteRec
{
public static ShowInfo g_ShowInfo = new ShowInfo();
}
/// 接口类 TCP的通信日志处理
/// </summary>
public class ShowInfo
{
public delegate void WriteTView(string str);
private WriteTView _myViewWrite;
public delegate void WriteTLog(object str);
private WriteTLog _myLogWrite;
/// <summary>
/// 构造
/// </summary>
public ShowInfo()
{
_myViewWrite = WriteDemo;
_myLogWrite = LogManager.LogRunInfo;
}
/// <summary>
/// 构造
/// </summary>
/// <param name="write"></param>
public ShowInfo(WriteTView write)
{
_myViewWrite = write;
_myLogWrite = LogManager.LogRunInfo;
}
/// <summary>
/// 显示的demo
/// </summary>
/// <param name="str"></param>
private void WriteDemo(string str)
{
Trace.WriteLine(str);
}
/// <summary>
/// 设置显示的回调函数
/// </summary>
/// <param name="write"></param>
public void SetViewWrite(WriteTView write)
{
_myViewWrite = write;
}
/// <summary>
/// 设置记录的回调函数
/// </summary>
/// <param name="write"></param>
public void SetLogWrite(WriteTLog write)
{
_myLogWrite = write;
}
/// <summary>
/// 显示
/// </summary>
/// <param name="obj"></param>
public void WriteView(object obj)
{
if (obj is Exception)
{
_myLogWrite(obj);
}
else if (obj is string)
{
_myViewWrite(obj as string);
}
}
/// <summary>
/// 记录到日志文件中
/// </summary>
/// <param name="str"></param>
public void WriteToLog(object obj)
{
if (_myLogWrite != null)
{
_myLogWrite(obj);
}
}
/// <summary>
/// 记录到日志文件中
/// </summary>
/// <param name="condition"></param>
/// <param name="str"></param>
public void WriteToLog(bool condition, object obj)
{
if (condition)
{
if (_myLogWrite != null)
{
_myLogWrite(obj);
}
}
}
#region 输出
/// <summary>
/// 显示
/// </summary>
/// <param name="format"></param>
/// <param name="arg"></param>
public void WriteToView(string format, params Object[] arg)
{
string str = String.Format(format, arg);
WriteView(str);
}
/// <summary>
/// 满足条件方可显示或记录
/// </summary>
/// <param name="condition">输出条件</param>
/// <param name="str">要输出的输出字符串</param>
/// <param name="isWriteLog">是否记录到日志文件</param>
/// <param name="isWriteView">是否显示</param>
public void WriteToView(bool condition, string str, bool isWriteLog, bool isWriteView)
{
if (condition)
{
if (isWriteView)
{
WriteView(str);
}
if (isWriteLog)
{
WriteToLog(str);
}
}
}
/// <summary>
/// 满足条件方可记录,不显示
/// </summary>
/// <param name="condition">输出条件</param>
/// <param name="str">要输出的输出字符串</param>
public void WriteToView(bool condition, string str)
{
WriteToView(condition, str, true, false);
}
/// <summary>
/// 满足条件方可记录,并标记是否显示
/// </summary>
/// <param name="condition">输出条件</param>
/// <param name="str">要输出的输出字符串</param>
/// <param name="isWriteView">是否显示</param>
public void WriteToView(bool condition, string str, bool isWriteView)
{
WriteToView(condition, str, true, isWriteView);
}
/// <summary>
/// 显示或记录
/// </summary>
/// <param name="str"></param>
/// <param name="isWriteLog"></param>
public void WriteToView(string str, bool isWriteLog, bool isWriteView)
{
WriteToView(true, str, isWriteLog, isWriteView);
}
/// <summary>
///显示,并标记是否记录
/// </summary>
/// <param name="str"></param>
/// <param name="isWriteLog"></param>
public void WriteToView(string str, bool isWriteLog)
{
WriteToView(true, str, isWriteLog, true);
}
/// <summary>
/// 显示并记录
/// </summary>
/// <param name="info"></param>
public void WriteToView(string info)
{
WriteToView(true, info, true, true);
}
/// <summary>
/// 记录,并标记是否显示
/// </summary>
/// <param name="str"></param>
/// <param name="isWriteLog"></param>
public void WriteToLog(string str, bool isWriteView)
{
WriteToView(true, str, true, isWriteView);
}
#endregion
}
/// <summary>
/// 日志记录
/// </summary>
public static class LogManager
{
/// <summary>
/// 文件夹名称
/// </summary>
public static string FolderName = "Log";
/// <summary>
/// 当前进程的ID
/// </summary>
public static string ID = Process.GetCurrentProcess().Id.ToString();
/// <summary>
/// 当天日志的个数
/// </summary>
private static int LogIndex = 1;
/// <summary>
/// 当天异常日志的个数
/// </summary>
private static int ExIndex = 1;
/// <summary>
/// 记录日志的线程锁
/// </summary>
private static object LOCKER_LOG = new object();
/// <summary>
/// 记录异常的线程锁
/// </summary>
private static object LOCKER_EX = new object();
/// <summary>
/// 记录运行日志
/// </summary>
/// <param name="msg">日志内容</param>
//[MethodImpl(MethodImplOptions.Synchronized)]
public static void LogRunInfo(string msg)
{
lock (LOCKER_LOG)
{
string path;
string file;
try
{
path = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase
, "LOG\\" + FolderName, DateTime.Now.Year.ToString(), DateTime.Now.Month.ToString());
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
var name = string.Format("{0}_{1}_{2}", FolderName, ID, DateTime.Now.ToString("yyyyMMdd"));
file = string.Format("{0}.log", name);
var pathName = Path.Combine(path, file);
FileInfo fi = new FileInfo(pathName);
if (fi.Exists)
{
while (fi.Exists
&& fi.Length > 50 * 1024 * 1024)//50MB
{
file = string.Format("{0}_{1}.log", name, LogIndex);
pathName = Path.Combine(path, file);
fi = new FileInfo(pathName);
if (!fi.Exists)
{
break;
}
else if (fi.Length > 50 * 1024 * 1024)
{
//当前日志大于50MB
LogIndex++;
}
}
}
else
{
LogIndex = 1;
}
using (StreamWriter sw = new StreamWriter(pathName, true))
{
sw.WriteLine(string.Format("{0} {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), msg));
sw.Dispose();
sw.Close();
}
}
catch
{
}
}
}
/// <summary>
/// 记录异常日志
/// </summary>
/// <param name="ex">获取的异常</param>
//[MethodImpl(MethodImplOptions.Synchronized)]
public static void LogRunInfo(Exception ex)
{
lock (LOCKER_EX)
{
string path;
string file;
try
{
//如果日志文件为空,则默认在Debug目录下新建 YYYY-mm-dd_Log.log文件
path = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "LOG\\" + FolderName);
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
var name = string.Format("{0}_Err_{1}", FolderName, DateTime.Now.ToString("yyyyMMdd"));
file = string.Format("{0}.log", name);
var pathName = Path.Combine(path, file);
FileInfo fi = new FileInfo(pathName);
if (fi.Exists)
{
while (fi.Exists
&& fi.Length > 50 * 1024 * 1024)//50MB
{
file = string.Format("{0}_{1}.log", name, ExIndex);
pathName = Path.Combine(path, file);
fi = new FileInfo(pathName);
if (!fi.Exists)
{
break;
}
else if (fi.Length > 50 * 1024 * 1024)
{
ExIndex++;
}
}
}
else
{
ExIndex = 1;
}
//把异常信息输出到文件
using (StreamWriter fs = new StreamWriter(pathName, true))
{
fs.WriteLine("-------------------------------------------------------------");
fs.WriteLine("当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
fs.WriteLine("异常信息:" + ex.Message);
fs.WriteLine("异常对象:" + ex.Source);
fs.WriteLine("调用堆栈:\n" + ex.StackTrace.Trim());
fs.WriteLine("触发方法:" + ex.TargetSite);
fs.WriteLine("-------------------------------------------------------------");
fs.WriteLine();
fs.Dispose();
fs.Close();
}
}
catch
{
}
}
}
/// <summary>
/// 记录日志
/// </summary>
/// <param name="obj"></param>
public static void LogRunInfo(object obj)
{
if (obj is Exception)
{
LogManager.LogRunInfo(obj as Exception);
}
if (obj is string)
{
LogManager.LogRunInfo(obj as string);
}
}
}
/// <summary>
/// 接口指针
/// </summary>
public class IWriteRec
{
public static ShowInfo g_ShowInfo = new ShowInfo();
}
阅读全文
0 0
- C#日志系统记录
- C#客户端日志记录
- c#日志记录文件
- C# 记录日志
- C#日志记录
- C# 创建文件日志记录
- C#使用Log4Net记录日志
- C#使用Log4Net记录日志
- C#使用Log4Net记录日志
- C#使用Log4Net记录日志
- 记录C#错误日志工具
- C#使用Log4Net记录日志
- C#使用Log4Net记录日志
- C#使用Log4Net记录日志
- C#使用Log4Net记录日志
- C#使用Log4Net记录日志
- C#使用Log4Net记录日志
- C#使用Log4Net记录日志
- 连接到远程linux服务器时上传和下载文件
- Java 初学者,如何学习 Java?
- linux 配置yum的操作
- 原生js的常用方法整理
- Linux系统篇
- C#日志记录
- 1007: [HNOI2008]水平可见直线
- 详解Linux服务器最大tcp连接数 网络编程 在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少?
- MySQL tedu培训
- DevExpress WPF入门指南:如何自动或手动添加DXSplashScreen控件
- 微信公众号自定义菜单如何添加emoji表情图标?
- SQL 取前一天、一月、一年的时间
- CentOS7下使用CNPM进行NPM、WEBPACK打包
- ListView多条目加载重写的两个方法