你的位置:首页 > 软件开发 > ASP.net > C#写文本日志帮助类(支持多线程)改进版(不适用于ASP.NET程序)

C#写文本日志帮助类(支持多线程)改进版(不适用于ASP.NET程序)

发布时间:2016-11-08 11:01:52
由于iis的自动回收机制,不适用于ASP.NET程序代码:using System;using System.Collections.Concurrent;using System.Configuration;using System.IO;using System.Text;u ...

由于iis的自动回收机制,不适用于get='_blank'>ASP.NET程序

代码:

C#写文本日志帮助类(支持多线程)改进版(不适用于ASP.NET程序)C#写文本日志帮助类(支持多线程)改进版(不适用于ASP.NET程序)
using System;using System.Collections.Concurrent;using System.Configuration;using System.IO;using System.Text;using System.Threading;using System.Threading.Tasks;namespace CommonDll{  /// <summary>  /// 写日志类  /// </summary>  public class LogUtil  {    #region 字段    public static string path = ConfigurationManager.AppSettings["LogPath"];    public static int fileSize = 10 * 1024 * 1024; //日志分隔文件大小    private static ConcurrentQueue<Tuple<string, DateTime>> queue = new ConcurrentQueue<Tuple<string, DateTime>>();    #endregion    #region 构造函数    static LogUtil()    {      Task.Factory.StartNew(new Action(delegate()      {        StringBuilder log;        string path;        Tuple<string, DateTime> tuple;        string item;        while (true)        {          log = new StringBuilder();          path = CreateLogPath();          while (queue.TryDequeue(out tuple))          {            item = string.Format(@"{0} {1}", tuple.Item2.ToString("yyyy-MM-dd HH:mm:ss.fff"), tuple.Item1);            log.AppendFormat("\r\n{0}", item);          }          if (log.Length > 0) WriteFile(log.ToString(2, log.Length - 2), path);          Thread.Sleep(100);        }      }));    }    #endregion    #region 写文件    /// <summary>    /// 写文件    /// </summary>    public static void WriteFile(string log, string path)    {      try      {        if (!Directory.Exists(Path.GetDirectoryName(path)))        {          Directory.CreateDirectory(Path.GetDirectoryName(path));        }        if (!File.Exists(path))        {          using (FileStream fs = new FileStream(path, FileMode.Create)) { fs.Close(); }        }        using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write))        {          using (StreamWriter sw = new StreamWriter(fs))          {            sw.WriteLine(log);            sw.Flush();          }          fs.Close();        }      }      catch { }    }    #endregion    #region 生成日志文件路径    /// <summary>    /// 生成日志文件路径    /// </summary>    public static string CreateLogPath()    {      int index = 0;      string logPath;      bool bl = true;      do      {        index++;        logPath = Path.Combine(path, "Log" + DateTime.Now.ToString("yyyyMMdd") + (index == 1 ? "" : "_" + index.ToString()) + ".txt");        if (File.Exists(logPath))        {          FileInfo fileInfo = new FileInfo(logPath);          if (fileInfo.Length < fileSize)          {            bl = false;          }        }        else        {          bl = false;        }      } while (bl);      return logPath;    }    #endregion    #region 写错误日志    /// <summary>    /// 写错误日志    /// </summary>    public static void LogError(string log)    {      queue.Enqueue(new Tuple<string, DateTime>("[Error] " + log, DateTime.Now));    }    #endregion    #region 写操作日志    /// <summary>    /// 写操作日志    /// </summary>    public static void Log(string log)    {      queue.Enqueue(new Tuple<string, DateTime>("[Info] " + log, DateTime.Now));    }    #endregion  }}

原标题:C#写文本日志帮助类(支持多线程)改进版(不适用于ASP.NET程序)

关键词:ASP.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。