最近公司的系统服务器经常出现磁盘空间不足的情况,登陆服务器发现原来是公司的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) < )
{
file.Delete();
}
//删除最后修改日志日期是几天前的日志
if (DateTime.Compare(file.LastWriteTime.AddDays(days), DateTime.Now) < )
{
file.Delete();
}
//删除日志名称日期是几天前的日志
if (DateTime.Compare(Convert.ToDateTime(file.Name.Substring(, )), DateTime.Now.AddDays(-days)) < )
{
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 > )
{
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 > )
{
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

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

系统界面如下:

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

下载地址:

程序下载

源码下载

【原创】日志文件清理工具V1.0的更多相关文章

  1. 日志文件清理工具V1.1

    上次做完日志文件清理工具V1.0 的版本后,确实给自己的工作带来不少的方便.虽然只是一个小工具,代码也比较简单,但有用就是好东西.上次开发比较匆忙,有些细节没来得及完善,今天吃完晚饭,边看亚冠比赛边把 ...

  2. 图像处理工具V1.0

    图像处理工具V1.0(仿彗星图片处理工具.VS2015安装界面)----个人无聊作品 以下是界面: 部分代码一.(摘自网络----加水印代码): public static void ImageWat ...

  3. 项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)

    需求   在整理文件和一些其他头文件的时候,需要对其名称进行整理和修改,此工具很早就应该写了,创业后,非常忙,今天抽空写了一个顺便提供给学习.   工具和源码下载地址   本篇文章的应用包和源码包可在 ...

  4. 用shell实现linux系统应用文件清理工具

    用shell实现linux系统文件清理工具 1:原始需求 在系统运维中,会产生大量应用备份文件.落地文件等,这些文件需要定时清理.一般来说,都是使用crontab 拉起一个脚本来清理.类似这样: 30 ...

  5. 最新:百度春节抢百万游戏--汤圆向前冲--辅助工具v1.0.0.2

    https://www.cnblogs.com/Charltsing/p/ADBJumpTY.html 联系QQ:564955427 本程序为Windows版,不要在手机里面打开. 汤圆向前冲辅助工具 ...

  6. IIS日志文件清理

    如何清除IIS日志以释放空间 打开“我的电脑”发现10GB容量的C盘只剩余355MB“可用空间”,已经严重不够用.如下图: 如果服务器的管理员并没有在C盘存储大容量文件,而IIS中站点的访问量又非常大 ...

  7. YaoLingJump开发者日志(五)V1.0版本完成

    跳跃吧瑶玲下载连接 官网下载 百度网盘下载 提取码:apx9 介绍   总算完成V1.0版本了,下面来简单地介绍一下吧!   打开游戏,最开始会进入到"主界面".   右上角的按钮 ...

  8. 日志文件 清理or压缩

    1.操作前请断开所有数据库连接. 2.分离数据库 分离数据库:企业管理器->服务器->数据库->cwbase1->右键->分离数据库 分离后,cwbase1数据库被删除, ...

  9. [原创]K8_C段旁注工具6.0 新增SMB漏洞扫描

    工具: K8_C段旁注工具6.0_0510[K.8]编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 201 ...

随机推荐

  1. sharepoint2013用场管理员进行文档库的爬网提示"没有权限,拒绝"的解决方法

    爬网提示被拒绝,场管理员明明可以打开那个站点的,我初步怀疑是:环回请求(LoopbackRequest)导致的 解决方法就是修改环回问题.修改注册表 具体操作方法: http://www.c-shar ...

  2. 最详细的hadoop2.2.0集群的HA高可靠的最简单配置

    简介 [from http://www.open-open.com/lib/view/open1390717631132.html] hadoop中的NameNode好比是人的心脏,非常重要,绝对不可 ...

  3. ButterKnife基本使用

    ButterKnife基本使用 Butter Knife处理字段和方法绑定.   重要更新: 目前(2016.4.29), ButterKnife的最新版本是8.0.1. Demo项目已更新: htt ...

  4. Intent(二)隐式调用intent

    在上一节我们一起学习了显示调用Intent,这一节我们来学习如何隐式调用Ingtent.有了这个我们就可以调用其他的线程,或者程序,可以让我们的应用程序变得多彩,如打开网页,拨打电话等. 接下来让我们 ...

  5. Mac使用极简教程

    最近领导让我写一篇关于Mac的使用教程,因为使用人群未知,所以尽量写的通俗易懂,可谓是关于Mac电脑使用的精简教程吧,在此发表出来以供参考. Mac因为安全性而闻名,我们拥有了一部Mac,那么我们来了 ...

  6. [css]我要用css画幅画(七) - 哆啦A梦

    接着之前的[css]我要用css画幅画(六),今天画的有所不同,画的是哆啦A梦,我们小时候对他的称呼其实是小叮当机器猫. (PS:这次我要做的事情,很多人已经做过,这并不是什么创新,我只是在学习并记录 ...

  7. C#知识点整理

    1.我们在Main()函数中,调用Test()函数,我们管Main()函数称之为调用者, 管Test()函数称之为被调用者. 如果被调用者想要得到调用者的值: 1).传递参数. 2).使用静态字段来模 ...

  8. Oracle数据泵(Data Dump)错误汇集

    Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例,下面总结一些自己使用数据泵(Data Dump)过程当中遇到的问题以及解决方法.都是在使用过程中遇到的问题,以后陆 ...

  9. Ant:build.xml 结构

     Ant build.xml 结构 project target task data property datatype v\:* {behavior:url(#default#VML);} o\:* ...

  10. SQL SERVER 2014 各个版本支持的功能

    转自:https://technet.microsoft.com/library/cc645993 转换箱规模限制 功能名称 Enterprise Business Intelligence Stan ...