using Epost.Common; using Epost.DAL; using Epost.Model; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace Epost.BLL { public class LogXmlBLL { DB db = new DB(); List list = new List(); #region 查看日志信息 public List Log4NetData() { list.Clear(); Log4NetModel model = new Log4NetModel(); model.Name = "日志文件"; //【改变】 string directoryPath = System.AppDomain.CurrentDomain.BaseDirectory + "\\Log\\System_log"; //string directoryPath = db.path_log4; long len = GetDirectoryLength(directoryPath); string length = CountSize(len); model.Space = length; list.Add(model); return list; } #endregion #region 获取文件并且转化文件大小 public static long GetDirectoryLength(string dirPath) { long len = 0; //判断该路径是否存在(是否为文件夹) if (!Directory.Exists(dirPath)) { //查询文件的大小 len = FileSize(dirPath); } else { //定义一个DirectoryInfo对象 DirectoryInfo di = new DirectoryInfo(dirPath); //通过GetFiles方法,获取di目录中的所有文件的大小 foreach (FileInfo fi in di.GetFiles()) { len += fi.Length; } //获取di中所有的文件夹,并存到一个新的对象数组中,以进行递归 DirectoryInfo[] dis = di.GetDirectories(); if (dis.Length > 0) { for (int i = 0; i < dis.Length; i++) { len += GetDirectoryLength(dis[i].FullName); } } } return len; } public static long FileSize(string filePath) { //定义一个FileInfo对象,是指与filePath所指向的文件相关联,以获取其大小 FileInfo fileInfo = new FileInfo(filePath); return fileInfo.Length; } public static string CountSize(long Size) { string m_strSize = ""; long FactSize = 0; FactSize = Size; if (FactSize < 1024.00) m_strSize = FactSize.ToString("F2") + " Byte"; else if (FactSize >= 1024.00 && FactSize < 1048576) m_strSize = (FactSize / 1024.00).ToString("F2") + " K"; else if (FactSize >= 1048576 && FactSize < 1073741824) m_strSize = (FactSize / 1024.00 / 1024.00).ToString("F2") + " M"; else if (FactSize >= 1073741824) m_strSize = (FactSize / 1024.00 / 1024.00 / 1024.00).ToString("F2") + " G"; return m_strSize; } #endregion #region 删除日志记录 public bool DeleteLog4Net() { string directoryPath = System.AppDomain.CurrentDomain.BaseDirectory + "\\Log\\System_log"; DirectoryInfo dir = new DirectoryInfo(directoryPath); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 foreach (FileSystemInfo i in fileinfo) { if (i is DirectoryInfo) //判断是否文件夹 { DirectoryInfo subdir = new DirectoryInfo(i.FullName); subdir.Delete(true); //删除子目录和文件 } else { File.Delete(i.FullName); //删除指定文件 } //return true; } //删除日志记录 if (true == true) { //记录日志 ErrorLogBLL logBLL = new ErrorLogBLL(); ErrorLogModel error_model = new ErrorLogModel(); error_model.Type = "3"; error_model.Remark = "删除日志(包括系统设置自动删除):日志目录" + directoryPath; logBLL.InsertErrorLog(error_model); } return true; } #endregion #region 加载日志文件的xml(定期删除) public bool LoadLog4XML() { try { //【改变】 string sql_xml = System.AppDomain.CurrentDomain.BaseDirectory + "\\Log\\delog4.xml"; //string sql_xml = @db.path_delog4; XmlDocument xmldoc = new XmlDocument(); string datatime = DateTime.Now.ToString(); XmlNode node = xmldoc.CreateXmlDeclaration("1.0", "utf-8", ""); xmldoc.AppendChild(node); if (!File.Exists(sql_xml)) { XmlElement root = xmldoc.CreateElement("Delete"); xmldoc.AppendChild(root); //子节点 XmlElement delete = xmldoc.CreateElement("delete"); root.AppendChild(delete); //一级属性 XmlAttribute day = xmldoc.CreateAttribute("days"); delete.Attributes.Append(day); day.Value = Convert.ToString(30); delete.InnerText = datatime;//当前时间 xmldoc.Save(sql_xml); } else { xmldoc.Load(sql_xml); XmlNode orderid2 = xmldoc.SelectSingleNode("Delete"); var list = orderid2.ChildNodes; for (int i = 0; i < list.Count; i++) { if (list[i].Attributes["days"].Name == "days") { string days = list[i].Attributes["days"].Value; string innerday = list[i].Attributes["days"].Value; DateTime dtt = Convert.ToDateTime(innerday); dtt = dtt.AddDays(Convert.ToInt32(days)); DateTime dtt2 = Convert.ToDateTime(datatime); if (dtt.CompareTo(dtt2) >= 0) { } else if (dtt.CompareTo(dtt2) < 0) { //执行删除任务的操作 DeleteLog4Net();//删除数据中的加载日志历史数据 } } } } } catch (Exception ex) { LogHelper.WriteLogInfo("加载日志文件定期删除异常:" + ex.ToString()); } //对比数据 return true; } #endregion #region 创建日志xml public bool Log4XML(int days) { //保存数据到xml格式中 string datatime = DateTime.Now.ToString(); //主目录 string sql_xml = System.AppDomain.CurrentDomain.BaseDirectory + "\\Log\\delog4.xml"; //string sql_xml = @db.path_delog4; //public static string sqlcon = ConfigurationManager.ConnectionStrings["path"].ToString(); XmlDocument xmldoc = new XmlDocument(); XmlNode node = xmldoc.CreateXmlDeclaration("1.0", "utf-8", ""); xmldoc.AppendChild(node); if (!File.Exists(sql_xml)) { //根节点 XmlElement root = xmldoc.CreateElement("Delete"); xmldoc.AppendChild(root); //子节点 XmlElement delete = xmldoc.CreateElement("delete"); root.AppendChild(delete); //一级属性 XmlAttribute day = xmldoc.CreateAttribute("days"); delete.Attributes.Append(day); day.Value = Convert.ToString(days); delete.InnerText = datatime;//当前时间 xmldoc.Save(sql_xml); } else { xmldoc.Load(sql_xml); XmlNode orderid2 = xmldoc.SelectSingleNode("Delete"); //获取属性 var list = orderid2.ChildNodes; for (int i = 0; i < list.Count; i++) { if (list[i].Attributes["days"].Name == "days") { list[i].Attributes["days"].Value = Convert.ToString(days); list[i].InnerText = datatime; } else { } } } xmldoc.Save(sql_xml); return true; } } #endregion }