一個打印日誌類

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;

namespace functiontest
{
    /// <summary>
    ///打印日誌
    ///XingSQ
    /// 2015-12-10
    /// </summary>
    public class Log
    {
        /// <summary>
        /// 構造日誌對象
        /// </summary>
        public Log()
        {
            logfilename = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "heatweblog.log";
        }
        /// <summary>
        /// 構造日誌對象
        /// </summary>
        /// <param name="path">日誌所在路徑</param>
        public Log(string path)
        {
            logfilename = path + "\\log.log";
        }

        /// <summary>
        /// 建立log文件
        /// </summary>
        /// <param name="path"></param>
        private void CreateFile(string path)
        {
            if (!File.Exists(path))
            {
                File.Create(path).Close();
            }
        }
        /// <summary>
        /// 寫log日誌
        /// </summary>
        /// <param name="title1">標題1</param>
        /// <param name="title2">標題2</param>
        /// <param name="logtext">log內容</param>
        public void WriteLog(string title1, string title2, string logtext)
        {
            try
            {
                CreateFile(logfilename);               
                StreamWriter writer = File.AppendText(logfilename);
                writer.WriteLine(DateTime.Now.ToString() + "--------" + title1 + "--------" + title2 + "--------" + logtext);
                writer.Flush();
                writer.Close();
                FileSlim(logfilename, 100);
            }
            catch (Exception e)
            {
                throw (e);
            }
        }

        /// <summary>
        /// 寫log日誌(只在debug 狀態下執行)
        /// </summary>
        /// <param name="title1">標題1</param>
        /// <param name="title2">標題2</param>
        /// <param name="logtext">log內容</param>
        [Conditional("DEBUG")]
        public void WriteLogBug(string title1, string title2, string logtext)
        {
            try
            {
                CreateFile(logfilename);
                StreamWriter writer = File.AppendText(logfilename);
                writer.WriteLine(DateTime.Now.ToString() + "--------" + title1 + "--------" + title2 + "--------" + logtext);
                writer.Flush();
                writer.Close();
                FileSlim(logfilename, 100);
            }
            catch (Exception e)
            {
                throw (e);
            }
        }

        /// <summary>
        /// 寫log日誌
        /// </summary>
        /// <param name="logtext">日誌內容</param>
        public void WriteLog(string logtext)
        {
            try
            {
                CreateFile(logfilename);
                StreamWriter writer = File.AppendText(logfilename);
                writer.WriteLine(DateTime.Now.ToString() + "--------" + logtext);
                writer.Flush();
                writer.Close();
                FileSlim(logfilename, 100);
            }
            catch (Exception e)
            {
                throw (e);
            }
        }

        /// <summary>
        /// 寫log日誌(只在debug 狀態下執行)
        /// </summary>
        /// <param name="logtext">日誌內容</param>
        [Conditional("DEBUG")]
        public void WriteLogDebug(string logtext)
        {
            try
            {
                CreateFile(logfilename);
                StreamWriter writer = File.AppendText(logfilename);
                writer.WriteLine(DateTime.Now.ToString() + "--------" + logtext);
                writer.Flush();
                writer.Close();
                FileSlim(logfilename, 100);
            }
            catch (Exception e)
            {
                throw (e);
            }
        }

        /// <summary>
        /// 取的文件大小(單位:字節)
        /// </summary>
        /// <param name="filepath">文件完成路徑(包括文件名)</param>
        /// <returns>文件大小(單位:字節)</returns>
        private long GetFileSize(string filepath)
        {
            FileInfo finfo = new FileInfo(filepath);
            return finfo.Length;
        }

        /// <summary>
        /// 給文件瘦身,當超過指定大小是就刪除文件內容使其只剩intLineNum行
        /// </summary>
        /// <param name="filepath">文件完成路徑(包括文件名)</param>
        /// <param name="size">文件大小(單位:K字節)</param>
        /// <returns></returns>
        private bool FileSlim(string filepath, long size)
        {
            try
            {
                if (GetFileSize(filepath) >= 1024 * size)
                {
                    string[] strArray = File.ReadAllLines(filepath, Encoding.GetEncoding("UTF-8"));
                    int lines = strArray.Length - intLineNum;
                    IList<string> strlist = strArray.ToList<string>();

                    //刪除list中的指定行數
                    for (int i = 0; i < lines; i++)
                    {
                        strlist.RemoveAt(0);
                    }
                    strlist.Add("\r\n");
                    //把list剩餘行寫回文件
                    File.WriteAllText(filepath, string.Join("\r\n", strlist.ToArray<string>()), Encoding.GetEncoding("UTF-8"));
                }
                return true;
            }
            catch (Exception e)
            {
                throw (e);
            }
        }

        private string logfilename;
        private const int intLineNum = 200;        //保留行數
    }
}

web

相關文章
相關標籤/搜索