zoukankan      html  css  js  c++  java
  • 一个可创建读取日志的管理类(可固定创建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()返回字符串时,请注意字符串中是否含有’‘,如果有的话,哪怕返回的是所有数据行,但string类型也只会显示到第一个‘’之前的信息;

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

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

  • 相关阅读:
    【JUC源码解析】AQS
    【JUC源码解析】Exchanger
    圣杯布局和双飞翼布局的理解和区别
    右侧固定宽度,左侧自适应屏幕的布局(笔试题)
    CSS和CSS3中的伪元素和伪类(总结)
    用CSS创建小三角形问题(笔试题常考)
    Pycharm下载安装和使用
    PIC33单片机中断服务函数写法(其他单片机同样适用)
    记录,ubuntu16.04将gitlab迁移到docker上遇到的一些问题与解决方法
    【算法】 算法效率
  • 原文地址:https://www.cnblogs.com/lsr-flying/p/4355498.html
Copyright © 2011-2022 走看看