这里,将日志管理基类命名为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大小的日志文件)的更多相关文章

  1. 分享一个14年写的用户管理类-swift版

    AccountManager类 14年设计,从swift 0.9开始,迭代到现在swift4.0版本,总体几乎没什么改动,简单稳定. 其实现的思路主要还是借助之前net反射的经验,实现了自动保存用户信 ...

  2. DownloadManager 下载管理类

    演示 简介 从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到.下载管理类可以长期处理多个HTTP下载任务,客户端 ...

  3. [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】

    本文转自:http://www.cnblogs.com/jirigala/archive/2010/10/07/1845275.html 2010-10-07 21:39 by 通用C#系统架构, 5 ...

  4. 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 ...

  5. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  6. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(7)之扩展基类和区域创建以及文本编辑配置

    一.扩展基类和区域创建 (1)在应用之前,我们先在表现层创建一个公共的系统扩展文件来(SystemExtension)存放我们需要延伸和扩展的方法类. 在常规的项目系统操作中,我们都需要用到增删查改的 ...

  7. 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil

    封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...

  8. 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,nloglogutil

    封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创 ...

  9. Cookie操作类、 包括创建、读取、修改、获取、销毁cookie

    Cookie操作类. 包括创建.读取.修改.获取.销毁cookie import java.util.Hashtable; import java.util.Iterator; import java ...

随机推荐

  1. 学习macos常用的一些快捷键笔记

    学习mac 操作系统使用笔记 Dock功能学习 类似快捷图标一样 Command+q quit a program Dock上添加与删除都用拖动 command+delete 删除文件 shift+c ...

  2. shell script入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  3. Linux获取时间日期方法

    linux中用shell获取昨天.明天或多天前的日期:在Linux中对man date -d 参数说的比较模糊,以下举例进一步说明:# -d, --date=STRING display time d ...

  4. strus2中获取表单数据 两种方式 属性驱动 和模型驱动

    strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...

  5. MicroSD卡(TF卡)SPI模式实现方法

    现在我们手机的内存卡多为Micro SD卡,又叫TF卡,所以Micro SD卡比SD卡常见.自己曾经也想写写SD卡的读取程序,但又不想特地再去买个SD卡,这时想起手机内存卡不是和SD卡很像吗?在网上查 ...

  6. VC远控(一)界面设计及套接字连接测试

    首先创建一个MFC项目. 选择基于对话框: 勾选Windows套接字 依次拉上各种不同的控件: Edit Control.Button.Tree.Static Text.List.Progress C ...

  7. TopFreeTheme精选免费模板【20130617】

    今天给大家推荐8款最新的WordPress和Joomla主题,它们绝大部分都是屏幕自适应主题,Mobile相当友好.如果你喜欢它们,就赶快收藏起来吧. Spacing – 来自Themeforest的 ...

  8. python 抽象类、抽象方法的实现

    由于python 没有抽象类.接口的概念,所以要实现这种功能得abc.py 这个类库,具体方式如下 from abc import ABCMeta, abstractmethod #抽象类 class ...

  9. windows下python的包管理器pip安装

    pip:  A tool for installing and managing Python packages. 要用到第三方包,python的版本就必须是2.7 https://pypi.pyth ...

  10. 【转】Hive导入10G数据的测试

    原博文出自于: http://blog.fens.me/hadoop-hive-10g/ 感谢! Hive导入10G数据的测试 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让H ...