一个可创建读取日志的管理类(可固定创建2M大小的日志文件)

这里,将日志管理基类命名为LogManagerBase(抽象类),具体的不同类型的日志可以通过继承完成。该基类可将日志以每个2M的方式存储起来,并可以读取当前正在使用的日志的所有内容。

要实现该基类,首先要了解以下几个IO类:

命名空间:System.IO

相关类:Directory,DirectoryInfo,File,FileInfo,FileStream,StreamReader,StreamWriter

具体实现代码如下:

 1 public abstract class LogManagerBase
 2     {
 3         public LogManagerBase(string _type)
 4         {
 5             this.logType = _type;
 6         }
 7         private  string logPath = string.Empty;
 8         /// <summary>
 9         /// Local Folder to save logs,default is application(.exe) folder
10         /// </summary>
11         public string LogPath
12         {
13             get
14             {
15                 if (logPath == string.Empty)
16                 {
17                     logPath = AppDomain.CurrentDomain.BaseDirectory+string.Format(@"Log\{0}\", LogType);
18                     if (!Directory.Exists(logPath))
19                         Directory.CreateDirectory(logPath);
20                 }
21                 return logPath;
22             }
23             set { logPath = value; }
24         }
25
26         /// <summary>
27         /// a URL to store log temporarily
28         /// </summary>
29         public string TempURL
30         {
31             get { return LogPath + string.Format("temp_{0}.log",LogType); }
32         }
33
34         /// <summary>
35         /// type of Log
36         /// </summary>
37         private string logType;
38         public string LogType
39         {
40             get { return logType; }
41         }
42
43         /// <summary>
44         /// write record to current temp log
45         /// </summary>
46         /// <param name="_record"></param>
47         public void WriteLog(string _record)
48         {
49             FileInfo fileInfo=new FileInfo(TempURL);
50
51             if (fileInfo.Exists)
52             {
53                 if (fileInfo.Length > 1024 * 1024 * 2)
54                 {
55                     string formalURL =string.Format(@"{0}{1}{2}.log", LogPath , DateTime.Now.ToString("yyyyMMddHHmmss") ,LogType);
56                     File.Move(TempURL, formalURL);
57                 }
58             }
59             else
60             {
61                 using (FileStream fs = File.Create(TempURL))
62                 {
63                     StreamWriter sw = new StreamWriter(fs);
64                     sw.WriteLine(string.Format("{0} {1}", LogType, DateTime.Now.ToString("yyyyMMddHHmmss")));
65                     sw.WriteLine("--------------------------------------------------------------------------");
66                     sw.Flush();
67                 }
68             }
69             using (StreamWriter sw = File.AppendText(TempURL))
70             {
71                 sw.WriteLine(_record);
72                 sw.Flush();
73             }
74         }
75         /// <summary>
76         /// Read current temp log
77         /// </summary>
78         /// <returns></returns>
79         public string ReadLog()
80         {
81             FileInfo fileInfo = new FileInfo(TempURL);
82             if (!fileInfo.Exists) return null;
83             StreamReader sr = new StreamReader(TempURL);
84             string strLog = sr.ReadToEnd();
85             sr.Close();
86             //string strLog = File.ReadAllText(TempURL);
87             return strLog;
88         }
89
90     }

最后,讲下在敲代码时碰到的几个小问题:

1)如果当前不存在要保存的文件夹,请首先使用Directory进行创建,然后再把文件存在当前目录;(使用DirectoryInfo进行查看路径是否存在)

2)ReadLog()返回字符串时,请注意字符串中是否含有’\0‘,如果有的话,哪怕返回的是所有数据行,但string类型也只会显示到第一个‘\0’之前的信息;

3)日志文件比较大的情况下,请使用StreamReader类读写(参考msdn文档);

4)使用StreamWriter时,请注意最后StreamWriter.Flush()这一步。

时间: 2024-11-23 04:56:54

一个可创建读取日志的管理类(可固定创建2M大小的日志文件)的相关文章

一天一个Linux基础命令之目录管理类命令mkdir

mkdir 创建目录 1.命令格式 mkdir [option]   <目录名>... 2.命令功能 通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录.要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限. 同一个目录下不能有同名的(区分大小写)文件和目录. 3.常用参数 -m, 设定权限<模式> (类似 chmod) -p,在创建目录之前的目录不存在,先创建上级目录 ,即创建目录之前先创建父目录 -v,  每次创建新目录

一天一个Linux基础命令之目录管理类命令rmdir

rmdir  删除空目录,非空的目录不能删除 1.命令格式 rmdir [options]      DIRECTORY 2.命令参数 -p, 递归删除,删除目录之前是否删除父目录,如果父目录为空的话就删除 -v, 删除目录时,显示删除信息 --help   显示此帮助信息并退出 --version  输出版本信息并退出 3.常用范例 例1:删除空目录doc 命令:rmdir doc [[email protected]~]# tree doc/ doc/   0directories, 0 f

一天一个Linux基础命令之目录管理类命令ls

ls 列出目录内容 1.命令格式 ls [option]   [目录名] 2.命令功能 显示当前目录内容,如果ls指定其他目录,那么就会显示指定目录里的文件及目录. 通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限),查看目录信息等等. 3.常用参数 -A,打印目录中的所有文件包括隐藏文件,但不包括.和.. -a:显示目录中的所有文件,包括隐藏文件 .表示当前目录 ..表示父目录 -l:用长格式打印目录中的文件和目录(文件类型.权限.硬链接次

一天一个Linux基础命令之目录管理类命令cd

cd 切换目录命令 1.命令格式 cd  [option]     [目录名] 2.命令功能 切换工作目录 3.常用范例 例1:cd  ~ 说明:~默认为root的家目录,如果~后面加入用户名,则可以进入指定用户的家目录 [[email protected] ~]# [[email protected] ~]# cd / [[email protected] /]# pwd / 说明:进入系统根目录,上面命令执行完后拿pwd命令看一下,当前目录已经到系统根目录了 . [[email protec

DownloadManager 下载管理类

演示 简介 从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到.下载管理类可以长期处理多个HTTP下载任务,客户端只需要给出请求的Uri和存放目标文件的位置即可,下载管理使用了一个AIDL服务器,所以可以放心的在后台执行,同时实例化的方法需要使用getSystemService(Context.DOWNLOAD_SERVICE) ,我们可以轻松的通过新增的这个API实现Android平台上的文件下载操作. Do

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

封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创建Logger类,完整代码如下: using NLog; using NLog.Config; using NLog.Mongo; using NLog.Targets; using System; using System.Collections.Generic; using System.IO;

XMPP得知--建立一个管理类

参考其他demo之后,设立一个管理类的发现看起来更舒服,理-- 但在建立与server连接其中.发现 Connect Error: {     NSLocalizedDescription = "You must set myJID before calling connect."; } 这种一个问题.知道是jid没有设置好,可是jid怎么设置呢?今天仍然没有弄清.假设有清楚的能够交流一下. 1.将管理类写成单例 static XmppManager *shareManager = N

C#基本语法复习-创建并管理类和对象

控制可访问性: private一个方法或字段只允许从类的内部访问,private关键字是默认的 public方法或字段既能从类的内部访问也能从外部访问 方法中声明的变量默认是不初始化的,而类中的字段自动初始化为0,null,false 使用构造器: 与类同名.能获取参数,但不能返回任何的值(即使是void),构造函数一般申明为public,如果声明为private则无法再类的外部构造类的对象. 分部类: 使用partial关键字修饰类. 假如方法中的参数与一个变量同名,则在该方法的任何语句中,参

综合运用类、继承、多态,完成一个公司人员管理类层次结构(未完待续)

1.Target /*综合运用类.继承.多态等技术,完成一个公司人员管理类层次结构,用来描述人员信息等, 重载各种运算符,完成数据库内容的赋值.添加.工资增长等.*/ 2.Code #include <iostream> #include <cstring> #include <string> #include <cstdio> #include<cstdlib> #define TECH const string name, const int