国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【個人使用.Net類庫】(2)Log日志記錄類

2019-11-17 03:02:02
字體:
來源:轉載
供稿:網友
【個人使用.Net類庫】(2)Log日志記錄類

開發接口程序時,要保證程序穩定運行就要時刻監控接口程序發送和接收的數據,這就需要一個日志記錄的類將需要的信息記錄在日志文件中,便于自己維護接口程序。(Web系統也是如此,只是對應的日志實現比這個要復雜一點)。

剛開始考慮的比較少,沒有加入控制日志文件數量的功能。運行了一段時間,文件夾內的Log文件如下所示:

QQ截圖20140717172227

如果是這樣,那運行一年不就三百多個日志文件了,想一想這太可怕了。通過查找資料,發現.Net中的FileInfo存有文件的信息(包括名稱,創建時間,文件大小等),那就自己定義一個文件比較器實現文件按照名稱降序排序(采用降序是因為要保留近期的Log文件)。文件比較強實現的類如下所示:

using System;using System.Collections;using System.IO;namespace DotNetCommon.Logger{    /// <summary>    /// 實現IComparer接口,實現文件按名稱降序排序    /// </summary>    class FileSorter:IComparer    {        /// <summary>        /// 繼承IComparer接口必須實現的方法        /// </summary>        /// <param name="x">FileInfo文件x</param>        /// <param name="y">FileInfo文件y</param>        /// <returns></returns>        public int Compare(object x, object y)        {            if (x == null && y == null)                return 0;            if (x == null) return -1;            if (y == null) return 1;            var xInfo = (FileInfo) x;            var yInfo = (FileInfo) y;            //按名稱降序排序            return String.Compare(yInfo.FullName, xInfo.FullName, StringComparison.Ordinal);        }    }}

接下來就是實現日志文件自動刪除。具體思路是,當創建一個新的日志文件時,檢測是否超出最大日志允許數量。若超出,使用上面定義的比較器刪除之。日志自動刪除代碼方法如下:

/// <summary>        /// 刪除Log目錄多余的日志文件        /// </summary>        public void DeleteUnnecessaryLogFiles()        {            var path = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + @"Log/");            var fileInfos = path.GetFiles("*.log");            Array.Sort(fileInfos, new FileSorter());            if (fileInfos.Length <= (_maxLogNum - 1)) return;            for (var i = _maxLogNum - 1; i < fileInfos.Length; i++)            {                var filepath = fileInfos[i].FullName;                if (!File.Exists(filepath)) continue;                try                {                    File.Delete(filepath);                }                catch (Exception)                {                    return;                }            }        }

Log日志類具體代碼如下所示:

using System;using System.IO;using System.Text;namespace DotNetCommon.Logger{    /// <summary>    /// 類說明:日志記錄(文本記錄和byte數組記錄)    /// 編碼人:鞠小軍    /// 聯系方式:binghuojxj@QQ.com    /// </summary>    class Log    {        /// <summary>        /// 程序當前目錄        /// </summary>        PRivate readonly DirectoryInfo _dir = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);        /// <summary>        /// 默認日志文件最大數量為20        /// </summary>        private readonly int _maxLogNum = 20;        /// <summary>        /// 構造函數        /// </summary>        /// <param name="maxLogNum">Log目錄下日志文件的最大數量</param>        public Log(int maxLogNum)        {            _maxLogNum = maxLogNum;        }        /// <summary>        /// 字符串寫入日志文件        /// </summary>        /// <param name="msg">寫入的字符串文本</param>        public void WriteLog_Txt(string msg)        {            FileStream stream = null;            var sb = new StringBuilder();            var path = _dir + "Log";            if (!Directory.Exists(path))            {                Directory.CreateDirectory(path);            }            var str2 = path + @"/" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";            sb.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ");            sb.Append(msg);            var bytes = Encoding.UTF8.GetBytes(sb + "/r/n");            try            {                if (!File.Exists(str2))                    DeleteUnnecessaryLogFiles();                stream = File.OpenWrite(str2);                stream.Position = stream.Length;                stream.Write(bytes, 0, bytes.Length);            }            catch (Exception exception)            {                Console.WriteLine("文件打開失敗{0}", exception.Message);            }            finally            {                if (stream != null) stream.Close();            }        }        /// <summary>        /// 字節數組寫入日志文件        /// </summary>        /// <param name="msg">提示信息</param>        /// <param name="data">字節數組</param>        public void WriteLog_Bytes(string msg, byte[] data)        {            FileStream stream = null;            var sb = new StringBuilder();            var path = _dir + @"/Log";            if (!Directory.Exists(path))            {                Directory.CreateDirectory(path);            }            var str2 = path + @"/" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";            sb.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ");            sb.Append(msg);            foreach (var num in data)            {                sb.AppendFormat("{0:x2} ", num);            }            var bytes = Encoding.UTF8.GetBytes(sb + "/r/n");            try            {                if (!File.Exists(str2))                    DeleteUnnecessaryLogFiles();                stream = File.OpenWrite(str2);                stream.Position = stream.Length;                stream.Write(bytes, 0, bytes.Length);            }            catch (Exception exception)            {                Console.WriteLine("文件打開失敗{0}", exception.Message);            }            finally            {                if (stream != null) stream.Close();            }        }        /// <summary>        /// 刪除Log目錄多余的日志文件        /// </summary>        public void DeleteUnnecessaryLogFiles()        {            var path = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + @"Log/");            var fileInfos = path.GetFiles("*.log");            Array.Sort(fileInfos, new FileSorter());            if (fileInfos.Length <= (_maxLogNum - 1)) return;            for (var i = _maxLogNum - 1; i < fileInfos.Length; i++)            {                var filepath = fileInfos[i].FullName;                if (!File.Exists(filepath)) continue;                try                {                    File.Delete(filepath);                }                catch (Exception)                {                    return;                }            }        }    }}

當前日志類不夠完善,我還沒有加上文件超過固定大小(如超出2M)自動創建新文件等等必要的功能,后續會逐漸完善。大家有什么好建議,歡迎大家拍磚,哈哈。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台北市| 礼泉县| 章丘市| 荣成市| 九江县| 马公市| 明水县| 麻城市| 婺源县| 探索| 德兴市| 衡南县| 麻栗坡县| 武义县| 淅川县| 乐陵市| 湖北省| 库车县| 静海县| 正宁县| 商水县| 武宣县| 关岭| 惠州市| 祁门县| 高邮市| 河西区| 嵊州市| 江西省| 蓝田县| 阿荣旗| 闸北区| 永寿县| 封开县| 梨树县| 南华县| 临颍县| 景泰县| 安化县| 阿瓦提县| 丽江市|