一个可创建读取日志的管理类(可固定创建2M大小的日志文件)
这里,将日志管理基类命名为LogManagerBase(抽象类),具体的不同类型的日志可以通过继承完成。该基类可将日志以每个2M的方式存储起来,并可以读取当前正在使用的日志的所有内容。
要实现该基类,首先要了解以下几个IO类:
命名空间:System.IO
相关类:Directory,DirectoryInfo,File,FileInfo,FileStream,StreamReader,StreamWriter
具体实现代码如下:
public abstract class LogManagerBase
{
public LogManagerBase(string _type)
{
this.logType = _type;
}
private string logPath = string.Empty;
/// <summary>
/// Local Folder to save logs,default is application(.exe) folder
/// </summary>
public string LogPath
{
get
{
if (logPath == string.Empty)
{
logPath = AppDomain.CurrentDomain.BaseDirectory+string.Format(@"Log\{0}\", LogType);
if (!Directory.Exists(logPath))
Directory.CreateDirectory(logPath);
}
return logPath;
}
set { logPath = value; }
} /// <summary>
/// a URL to store log temporarily
/// </summary>
public string TempURL
{
get { return LogPath + string.Format("temp_{0}.log",LogType); }
} /// <summary>
/// type of Log
/// </summary>
private string logType;
public string LogType
{
get { return logType; }
} /// <summary>
/// write record to current temp log
/// </summary>
/// <param name="_record"></param>
public void WriteLog(string _record)
{
FileInfo fileInfo=new FileInfo(TempURL); if (fileInfo.Exists)
{
if (fileInfo.Length > * * )
{
string formalURL =string.Format(@"{0}{1}{2}.log", LogPath , DateTime.Now.ToString("yyyyMMddHHmmss") ,LogType);
File.Move(TempURL, formalURL);
}
}
else
{
using (FileStream fs = File.Create(TempURL))
{
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(string.Format("{0} {1}", LogType, DateTime.Now.ToString("yyyyMMddHHmmss")));
sw.WriteLine("--------------------------------------------------------------------------");
sw.Flush();
}
}
using (StreamWriter sw = File.AppendText(TempURL))
{
sw.WriteLine(_record);
sw.Flush();
}
}
/// <summary>
/// Read current temp log
/// </summary>
/// <returns></returns>
public string ReadLog()
{
FileInfo fileInfo = new FileInfo(TempURL);
if (!fileInfo.Exists) return null;
StreamReader sr = new StreamReader(TempURL);
string strLog = sr.ReadToEnd();
sr.Close();
//string strLog = File.ReadAllText(TempURL);
return strLog;
} }
最后,讲下在敲代码时碰到的几个小问题:
1)如果当前不存在要保存的文件夹,请首先使用Directory进行创建,然后再把文件存在当前目录;(使用DirectoryInfo进行查看路径是否存在)
2)ReadLog()返回字符串时,请注意字符串中是否含有’\0‘,如果有的话,哪怕返回的是所有数据行,但string类型也只会显示到第一个‘\0’之前的信息;
3)日志文件比较大的情况下,请使用StreamReader类读写(参考msdn文档);
4)使用StreamWriter时,请注意最后StreamWriter.Flush()这一步。
一个可创建读取日志的管理类(可固定创建2M大小的日志文件)的更多相关文章
- 分享一个14年写的用户管理类-swift版
AccountManager类 14年设计,从swift 0.9开始,迭代到现在swift4.0版本,总体几乎没什么改动,简单稳定. 其实现的思路主要还是借助之前net反射的经验,实现了自动保存用户信 ...
- DownloadManager 下载管理类
演示 简介 从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到.下载管理类可以长期处理多个HTTP下载任务,客户端 ...
- [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
本文转自:http://www.cnblogs.com/jirigala/archive/2010/10/07/1845275.html 2010-10-07 21:39 by 通用C#系统架构, 5 ...
- Android 性能优化(16)线程优化:Creating a Manager for Multiple Threads 如何创建一个线程池管理类
Creating a Manager for Multiple Threads 1.You should also read Processes and Threads The previous le ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(7)之扩展基类和区域创建以及文本编辑配置
一.扩展基类和区域创建 (1)在应用之前,我们先在表现层创建一个公共的系统扩展文件来(SystemExtension)存放我们需要延伸和扩展的方法类. 在常规的项目系统操作中,我们都需要用到增删查改的 ...
- 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil
封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...
- 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,nloglogutil
封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...
- Cookie操作类、 包括创建、读取、修改、获取、销毁cookie
Cookie操作类. 包括创建.读取.修改.获取.销毁cookie import java.util.Hashtable; import java.util.Iterator; import java ...
随机推荐
- 【英文】Bingo口语笔记(18) - Cover系列
cover charge 服务费 cover version 翻唱版本 cover the news 头条新闻
- 【英语】Bingo口语笔记(57) - 常见的口语弱读
- 【转】Android 服务器之SFTP服务器上传下载功能
原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...
- 使用 foreach 操作数组
foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组.集合时, foreach 更简单便捷.从英文字面意思理解 foreach 也就是“ for 每一个”的意思,那 ...
- JAVA 锁
JAVA 锁 锁的概念 Java中的锁是控制资源访问的一种方式.它弥补了synchronized的可操作性不强的不足. Java的锁都实现了Lock接口.Lock结构定义了锁的基本操作. 函数 解释 ...
- TortoiseSVN 插件配置及使用方法
一.安装和配置 TortoiseSVN的下载地址 32bit:TortoiseSVN-1.8.2.24708-win32-svn-1.8.3.msi 64bit:TortoiseSVN-1.8.2.2 ...
- 2014搜狗前端面经【A事业部】
刚刚面完搜狗,有种莫名其妙的感觉,哪里莫名其妙呢?听我慢慢道来... 开始面试官就这简历,问了一些有的没的东西,都不深(好吧我承认之前的经历有点菜,没神马加分项啊). 后面开始技术面: 知识点1:JS ...
- 把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend
//把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend //dp[i][j]:把第i个数转成第j小的数,最小花费 //此题与po ...
- awk与sed简明教程
看到大牛写的关于awk和sed的简明教程,写得很好,为了尊重作者,就不全文转载了,这里标记下链接,方便以后查阅. awk简明教程:http://coolshell.cn/articles/9070.h ...
- lego blocks
1.题目描述 https://www.hackerrank.com/challenges/lego-blocks 2.解法分析 这题乍看一下觉得应该可以用动态规划来做,但是却死活想不到最优子结构,在网 ...