zoukankan      html  css  js  c++  java
  • 【原创】日志文件清理工具V1.0

            最近公司的系统服务器经常出现磁盘空间不足的情况,登陆服务器发现原来是公司的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);//保存 
                        break;
                    }
                }
    
            }
    
            /// <summary>
            /// 修改节点的内容
            /// </summary>
            /// <param name="path">xml文件的物理路径</param>
            /// <param name="node_root">根节点名称</param>
            /// <param name="new_text">节点的新内容</param>
            /// <param name="att_name">节点的属性名</param>
            /// <param name="att_value">节点的属性值</param>
            public static void UpdateElement(string path, string node_root, string new_text, string att_name, string att_value)
            {
                LoadXml(path, node_root);
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;//获取bookstore节点的所有子节点 
                foreach (XmlNode xn in nodeList)//遍历所有子节点 
                {
                    XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型 
                    if (xe.GetAttribute(att_name) == att_value)
                    {
                        xe.InnerText = new_text;    //内容赋值
                        xmlDoc.Save(path);//保存 
                        break;
                    }
                }
    
            }
    
    
            /// <summary>
            /// 删除节点
            /// </summary>
            /// <param name="path">xml文件的物理路径</param>
            /// <param name="node_root">根节点名称</param>
            /// <param name="att_name">节点的属性名</param>
            /// <param name="att_value">节点的属性值</param>
            public static void DeleteNode(string path, string node_root, string att_name, string att_value)
            {
    
                LoadXml(path, node_root);
    
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;
                XmlNode root = xmlDoc.SelectSingleNode(node_root);
    
                foreach (XmlNode xn in nodeList)
                {
                    XmlElement xe = (XmlElement)xn;
    
                    if (xe.GetAttribute(att_name) == att_value)
                    {
                        //xe.RemoveAttribute("name");//删除name属性 
                        xe.RemoveAll();//删除该节点的全部内容 
                        root.RemoveChild(xe);
                        xmlDoc.Save(path);//保存 
                        break;
                    }
    
                }
            }
    
            /// <summary> 
            /// 读取数据 
            /// </summary> 
            /// <param name="path">路径</param> 
            /// <param name="node">节点</param> 
            /// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param> 
            /// <returns>string</returns> 
            /************************************************** 
             * 使用示列: 
             * XmlHelper.Read(path, "//Node", "") 
             * XmlHelper.Read(path, "//Node/Element[@Attribute='Name']", "Attribute") 
             ************************************************/
            public static string Read(string path, string node, string attribute)
            {
                string value = "";
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);
                }
                catch { }
                return value;
            }
    
            /// <summary> 
            /// 插入数据 
            /// </summary> 
            /// <param name="path">路径</param> 
            /// <param name="node">节点</param> 
            /// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param> 
            /// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param> 
            /// <param name="value"></param> 
            /// <returns></returns> 
            /************************************************** 
             * 使用示列: 
             * XmlHelper.Insert(path, "//Node", "Element", "", "Value") 
             * XmlHelper.Insert(path, "//Node", "Element", "Attribute", "Value") 
             * XmlHelper.Insert(path, "//Node", "", "Attribute", "Value") 
             ************************************************/
            public static void Insert(string path, string node, string element, string attribute, string value)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    if (element.Equals(""))
                    {
                        if (!attribute.Equals(""))
                        {
                            XmlElement xe = (XmlElement)xn;
                            xe.SetAttribute(attribute, value);
                        }
                    }
                    else
                    {
                        XmlElement xe = doc.CreateElement(element);
                        if (attribute.Equals(""))
                            xe.InnerText = value;
                        else
                            xe.SetAttribute(attribute, value);
                        xn.AppendChild(xe);
                    }
                    doc.Save(path);
                }
                catch { }
            }
    
            /// <summary> 
            /// 修改数据 
            /// </summary> 
            /// <param name="path">路径</param> 
            /// <param name="node">节点</param> 
            /// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param> 
            /// <param name="value"></param> 
            /// <returns></returns> 
            /************************************************** 
             * 使用示列: 
             * XmlHelper.Update(path, "//Node", "", "Value") 
             * XmlHelper.Update(path, "//Node", "Attribute", "Value") 
             ************************************************/
            public static void Update(string path, string node, string attribute, string value)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    XmlElement xe = (XmlElement)xn;
                    if (attribute.Equals(""))
                        xe.InnerText = value;
                    else
                        xe.SetAttribute(attribute, value);
                    doc.Save(path);
                }
                catch { }
            }
    
            /// <summary> 
            /// 删除数据 
            /// </summary> 
            /// <param name="path">路径</param> 
            /// <param name="node">节点</param> 
            /// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param> 
            /// <param name="value"></param> 
            /// <returns></returns> 
            /************************************************** 
             * 使用示列: 
             * XmlHelper.Delete(path, "//Node", "") 
             * XmlHelper.Delete(path, "//Node", "Attribute") 
             ************************************************/
            public static void Delete(string path, string node, string attribute)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    XmlElement xe = (XmlElement)xn;
                    if (attribute.Equals(""))
                        xn.ParentNode.RemoveChild(xn);
                    else
                        xe.RemoveAttribute(attribute);
                    doc.Save(path);
                }
                catch { }
            }
    
            #endregion
    View Code

    其他代码就不贴了,很简单。

    系统界面如下:

             写了一个晚上,将程序写完了,简单测试了一下,基本功能已经实现了,时间仓促,程序不足之处在所难免,如果大家在使用过程中发现有什么问题,请给我网站或者论坛留言,我好及时修正。

    下载地址:

     程序下载

    源码下载

  • 相关阅读:
    你真的知道什么是三观吗?
    iOS block 的两大常见用法
    微信小程序开发入门
    Linux 简介
    OC 的Runtime 消息转发机制
    关于 ES6 的 let ,var和 const
    python time,datetime
    python操作mysql(pymysql + sqlalchemy)
    python操作redis
    python操作memcached
  • 原文地址:https://www.cnblogs.com/kingboy2008/p/3575390.html
Copyright © 2011-2022 走看看