最近公司的系統服務器經常出現磁盤空間不足的情況,登陸服務器發現原來是公司的HR系統日志造成的(插個話題:我們公司的HR系統都實施兩年多了還沒上線,且不說軟件功能如何,服務太TMD差勁了,更可氣的是軟件顧問把系統的組織架構都實施錯誤了,造成公司的大部分模塊使用了一年的數據都得重新再錄入。),原來這個系統每天的日志文件都自動保存在服務器C盤,時間久了,造成磁盤空間不足。不指望軟件商再改程序,畢竟這些歷史日志文件關鍵時候還是很有用的,但時間太久的肯定留著也沒用。還有就是也不能每天都登陸服務器去看磁盤空間情況。干脆自力更生,自己做個小程序實現自動清理服務器日志信息。
日志文件格式是按照時間自動生成的文本文件,這個知道了就好說了。無非就是定時刪除幾天的前的文本文件,然后用xml保存配置信息。
刪除日志代碼:
/// <summary> /// 定期刪除日志 /// </summary> /// <param name="strPath">日志路徑</param> /// <param name="days">天數</param> public static void DeleteLog(string strPath,int days) { if (Directory.Exists(strPath)) { DirectoryInfo dinfor = new DirectoryInfo(strPath); FileInfo[] files = dinfor.GetFiles(); foreach (FileInfo file in files) { try { //刪除創建日志日期是幾天前的日志 if (DateTime.Compare(file.CreationTime.AddDays(days), DateTime.Now) < 0) { file.Delete(); } //刪除最后修改日志日期是幾天前的日志 if (DateTime.Compare(file.LastWriteTime.AddDays(days), DateTime.Now) < 0) { file.Delete(); } //刪除日志名稱日期是幾天前的日志 if (DateTime.Compare(Convert.ToDateTime(file.Name.Substring(0, 8)), DateTime.Now.AddDays(-days)) < 0) { file.Delete(); } } catch (Exception ex) { continue; } } } }XML文件幫助:

#region Xml基本操作 //實例化Xml文檔 PRivate static XmlDocument xmlDoc; /// <summary> /// 加載xml文件 /// </summary> /// <param name="path">XML文件路徑</param> /// <param name="rootNode">根節點</param> public static void LoadXml(string path, string rootNode) { xmlDoc = new XmlDocument(); //判斷xml文件是否存在 if (!System.IO.File.Exists(path)) { //創建xml 聲明節點 XmlNode xmlnode = xmlDoc.CreateNode(System.Xml.XmlNodeType.XmlDeclaration, "", ""); //添加上述創建和 xml聲明節點 xmlDoc.AppendChild(xmlnode); //創建xml dbGuest 元素(根節點) XmlElement xmlelem = xmlDoc.CreateElement("", rootNode, ""); xmlDoc.AppendChild(xmlelem); try { xmlDoc.Save(path); } catch (Exception ex) { throw ex; } xmlDoc.Load(path); } else { //加載xml文件 xmlDoc.Load(path); } } /// <summary> /// 添加xml子節點 /// </summary> /// <param name="path">xml文件的物理路徑</param> /// <param name="node_root">根節點名稱</param> /// <param name="node_name">添加的子節點名稱</param> /// <param name="node_text">子節點文本</param> public static void AddElement(string path, string node_root, string node_name, string node_text) { LoadXml(path, node_root); XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;//獲取bookstore節點的所有子節點 //判斷是否有節點,有節點就遍歷所有子節點,看看有沒有重復節點,沒節點就添加一個新節點 if (nodeList.Count > 0) { foreach (XmlNode xn in nodeList)//遍歷所有子節點 { XmlElement xe = (XmlElement)xn;//將子節點類型轉換為XmlElement類型 if (xe.Name != node_name) { XmlNode xmldocSelect = xmlDoc.SelectSingleNode(node_root); //選中根節點 XmlElement son_node = xmlDoc.CreateElement(node_name); //添加子節點 son_node.InnerText = node_text; //添加節點文本 xmldocSelect.AppendChild(son_node); //添加子節點 xmlDoc.Save(path); //保存xml文件 break; } } } else { XmlNode xmldocSelect = xmlDoc.SelectSingleNode(node_root); //選中根節點 XmlElement son_node = xmlDoc.CreateElement(node_name); //添加子節點 son_node.InnerText = node_text; //添加節點文本 xmldocSelect.AppendChild(son_node); //添加子節點 xmlDoc.Save(path); //保存xml文件 } } /// <summary> /// 添加xml子節點 /// </summary> /// <param name="path">xml文件的物理路徑</param> /// <param name="node_root">根節點名稱</param> /// <param name="node_name">添加的子節點名稱</param> /// <param name="node_text">子節點文本</param> /// <param name="att_name">節點屬性名稱</param> /// <param name="att_value">節點屬性值</param> public static void AddElement(string path, string node_root, string node_name, string node_text, string att_name, string att_value) { LoadXml(path, node_root); XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;//獲取bookstore節點的所有子節點 //判斷是否有節點,有節點就遍歷所有子節點,看看有沒有重復節點,沒節點就添加一個新節點 if (nodeList.Count > 0) { foreach (XmlNode xn in nodeList)//遍歷所有子節點 { XmlElement xe = (XmlElement)xn;//將子節點類型轉換為XmlElement類型 if (xe.GetAttribute(att_name) != att_value) { XmlNode xmldocSelect = xmlDoc.SelectSingleNode(node_root); //選中根節點 XmlElement son_node = xmlDoc.CreateElement(node_name); //添加子節點 son_node.SetAttribute(att_name, att_value); //設置屬性 son_node.InnerText = node_text; //添加節點文本 xmldocSelect.AppendChild(son_node); //添加子節點 xmlDoc.Save(path); //保存xml文件 break; } } } else { XmlNode xmldocSelect = xmlDoc.SelectSingleNode(node_root); //選中根節點 XmlElement son_node = xmlDoc.CreateElement(node_name); //添加子節點 son_node.SetAttribute(att_name, att_value); //設置屬性 son_node.InnerText = node_text; //添加節點文本 xmldocSelect.AppendChild(son_node); //添加子節點 xmlDoc.Save(path); //保存xml文件 } } /// <summary> /// 修改節點的內容 /// </summary> /// <param name="path">xml文件的物理路徑</param> /// <param name="node_root">根節點名稱</param> /// <param name="node_name">子節點名稱</param> /// <param name="new_text">節點的新內容</param> public static void UpdateElement(string path, string node_root, string node_name, string new_text) { LoadXml(path, node_root); XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;//獲取bookstore節點的所有子節點 foreach (XmlNode xn in nodeList)//遍歷所有子節點 { XmlElement xe = (XmlElement)xn;//將子節點類型轉換為XmlElement類型 if (xe.Name == node_name) { xe.InnerText = new_text; //內容賦值 xmlDoc.Save(path);//保存
新聞熱點
疑難解答