public class LoggingHelper
    {
        /// <summary>
        /// 获取文件路径
        /// </summary>
        /// <returns></returns>
        public static string GetLogFilePath()
        {
            string log_file_path = OPOConfig.GetValue("Log_File_Path");
            if (log_file_path == null)
            {
                log_file_path = AppDomain.CurrentDomain.BaseDirectory + "\\Content\\Log\\";
            }
            return log_file_path;
        }
        /// <summary>
        /// 写入日志文件
        /// </summary>
        /// <param name="logType"></param>
        /// <param name="message"></param>
        /// <param name="writeType"></param>
        /// <param name="logFileName"></param>
        public static void WriteLog(string logType, string message, int writeType = 0, string logFileName = "")
        {
            if (string.IsNullOrWhiteSpace(logFileName))
            {
                logFileName = DateTime.Now.Date.ToString("yyyyMMdd");
            }
            string strlogpath = GetLogFilePath() + "\\日志文件" + logFileName+"\\";
            if (!Directory.Exists(strlogpath))//判断文件夹是否存在
            {
                Directory.CreateDirectory(strlogpath); //创建新文件夹
            }

            try
            {
                DeleteFile(strlogpath, 30);
                DateTime now = DateTime.Now;//现在
                string fileName = string.Empty;//文件名
             
                fileName += DateTime.Today.ToString("yyyyMMdd").Replace("/", "").Replace("-", "").Replace("\\", "").Replace(" ", "").Replace(":", "").Replace(":", "") + "_" + DateTime.Now.Hour + ".log";

                string fullPath = strlogpath + fileName;
                while (IsFileInUse(fullPath))
                {
                    System.Threading.Thread.Sleep(100);
                }
                using (StreamWriter output = new StreamWriter(fullPath, true, System.Text.Encoding.UTF8))
                {
                    switch (writeType)
                    {
                        case 1:
                            output.WriteLine("\r\n");
                            output.WriteLine("-------------------开始:-" + now.ToString() + "-------------------------------");
                            output.WriteLine("类型:" + logType);
                            output.WriteLine("描述:" + message);
                            output.Close();
                            break;
                        case 2:
                            output.WriteLine("\r\n");
                            output.WriteLine("类型:" + logType);
                            output.WriteLine("描述:" + message);
                            output.Close();
                            break;
                        case 3:
                            output.WriteLine("类型:" + logType);
                            output.WriteLine("描述:" + message);
                            output.WriteLine("-------------------结束:-" + now.ToString() + "-------------------------------");
                            output.WriteLine("\r\n");
                            output.Close();

                            break;
                        default:
                            output.WriteLine("\r\n");
                            output.WriteLine("-------------------开始:-" + now.ToString() + "-------------------------------");
                            output.WriteLine("类型:" + logType);
                            output.WriteLine("描述:" + message);
                            output.WriteLine("-------------------结束:-" + now.ToString() + "-------------------------------");
                            output.Close();
                            break;
                    }
                    if (writeType == 0)
                    {

                    }
                    else
                    {

                    }

                }
            }
            catch (Exception error)
            {
                WriteLogError(error.Message);//记录日志异常
            }
        }

        private static void WriteLogError(string error)
        {
           

            string strlogpath = GetLogFilePath() + "LogError";
            string fileName = DateTime.Now.ToString("yyyy-MM-dd") + ".log";
            string fullPath = strlogpath + fileName;
            if (!Directory.Exists(fullPath))//判断文件夹是否存在
            {
                Directory.CreateDirectory(fullPath); //创建新文件夹
            }
            try
            {
                while (IsFileInUse(fullPath))
                {
                    System.Threading.Thread.Sleep(100);
                }
                DateTime now = DateTime.Now; //取现在
                using (StreamWriter output = new StreamWriter(fullPath, true, System.Text.Encoding.UTF8))
                {
                    output.WriteLine("----------------------------------------------------------------------------------");
                    output.WriteLine("Begin: " + now.ToString());
                    output.WriteLine("Type: Log Exception");
                    output.WriteLine("Description: " + error);
                    output.WriteLine("End");
                    output.Close(); //关闭
                }
            }
            catch
            {

            }
        }

        /// <summary>
        /// 文件是否被占用
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static bool IsFileInUse(string fileName)
        {
            bool inUse = true;

            FileStream fs = null;
            try
            {

                fs = new FileStream(fileName, FileMode.Open, FileAccess.Read,

                FileShare.None);

                inUse = false;
            }
            catch
            {
            }
            finally
            {
                if (fs != null)

                    fs.Close();
            }
            return inUse;//true表示正在使用,false没有使用
        }

        /// <summary>
        /// 删除文件夹
        /// </summary>
        /// <param name="fileDirect"></param>
        /// <param name="saveDay"></param>
        private static void DeleteFile(string fileDirect, int saveDay)
        {
            DateTime nowTime = DateTime.Now;
            DirectoryInfo root = new DirectoryInfo(fileDirect);
            DirectoryInfo[] dics = root.GetDirectories();//获取文件夹

            FileAttributes attr = File.GetAttributes(fileDirect);
            if (attr == FileAttributes.Directory)//判断是不是文件夹
            {
                foreach (DirectoryInfo file in dics)//遍历文件夹
                {
                    TimeSpan t = nowTime - file.CreationTime;  //当前时间  减去 文件创建时间
                    int day = t.Days;
                    if (day > saveDay)   //保存的时间 ;  单位:天
                    {

                        Directory.Delete(file.FullName, true);  //删除超过时间的文件夹
                    }
                }
            }
        }
    }

C# LoggingHelp 自定义记录日志帮助类的更多相关文章

  1. Android 自定义Activity基类与TitleBar

    我们在开发App的时候有时候碰到多个界面有一个共同点的时候,比如,都有相同的TitleBar,并且TitleBar可以设置显示的文字.TitleBar上的点击事件,如果给每一个Activity都写一遍 ...

  2. hadoop编程小技巧(5)---自定义输入文件格式类InputFormat

    Hadoop代码测试环境:Hadoop2.4 应用:在对数据需要进行一定条件的过滤和简单处理的时候可以使用自定义输入文件格式类. Hadoop内置的输入文件格式类有: 1)FileInputForma ...

  3. WPF自定义窗口基类

    WPF自定义窗口基类时,窗口基类只定义.cs文件,xaml文件不定义.继承自定义窗口的类xaml文件的根节点就不再是<Window>,而是自定义窗口类名(若自定义窗口与继承者不在同一个命名 ...

  4. Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  5. 利用NSUserdefaults来存储自定义的NSObject类及自定义类数组

    利用NSUserdefaults来存储自定义的NSObject类及自定义类数组 1.利用NSUserdefaults来存储自定义的NSObject类 利用NSUserdefaults也可以来存储及获取 ...

  6. 安卓开发37:自定义的HorizontalScrollView类,使其pageScroll的时候焦点不选中

    自定义一个HorizontalScrollView类,主要为了让这个HorizontalScrollView不能鼠标点击,不能左右按键,并且没有焦点. public class ImageMoveHo ...

  7. WPF自学入门(九)WPF自定义窗口基类

    今天简单记录一个知识点:WPF自定义窗口基类,常用winform的人知道,winform的窗体继承是很好用的,写一个基础窗体,直接在后台代码改写继承窗体名.但如果是WPF要继承窗体,我个人感觉没有理解 ...

  8. java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类

    package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...

  9. C#自定义FTP访问类的代码

    如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; ...

  10. va注解应用实例 - Annotation, 自定义注解, 注解类规则【转】

    本文介绍了java的自定义注解及注解类编写的规则, 并通过实例来说明下如何使用java的注解. 实例演示了注解在类,构造方法,方法和字段的使用. 可以从这里下载到完成的工程代码: http://dl. ...

随机推荐

  1. unigui的程序编译后自动运行傻傻的手动【7】

    我们每次修改unigui程序后,一般需要编译后执行,查看效果.可是每次都要关闭杀掉服务程序,再刷新浏览器才能实现. EMB应该知道这个反人类的做法吧.实际上提供了参数配置:自动kill服务程序,自动打 ...

  2. Transformer自注意力機制如何捕捉“今昔對仗”

    讀者希望我結合<道德經>等文言文實踐,展示自注意力機制如何捕捉"今昔對仗". 首先,讀者之前指出:在總結鄧鴻的丼型結構時遺漏了關鍵點,並強調要批判瑪律可夫假設而非全面否 ...

  3. STLINK/JLINK USB识别不稳定问题的解决

    第一阶段:自己基于STM32F103C8T6的STLINK,调试一直正常. 第二阶段:发现了硬汉的教程,基于JLINK的RTT viewer 代替串口打印调试信息,所以购买了JLINK,手里的STLI ...

  4. java一个校验对象是否为null的豪华大礼包

    自写的校验所有类型是否为null的工具类, 懒人福音,嘎嘎好用. 1 /** 2 * 一个校验对象是否为null的豪华大礼包 3 * 可以校验:Collection,Map,String,Enumer ...

  5. il热更新(一)

    转载请标明出处:http://www.cnblogs.com/zblade/ 最近研究了一下如何在unity中实现c#的热更新,对于整个DLL热更新的过程和方案有一个初步的了解,这儿就写下来,便于后续 ...

  6. 100行代码实现Chat2XX(DB/ Web/ KnowledgeBase)

    这两年基于大模型的应用可谓五花八门,Chat2DB,Chat2Web,Chat2KnowledgeBase,Chat2XXX等等.本质上都是以自然语言作为系统输入,通过各种手段获取额外的上下文信息,然 ...

  7. kettle介绍-Step之Return steps metrics

    Return steps metrics转换步骤信息统计介绍 转换步骤信息统计步骤可以用于统计当前转换中的其它步骤信息,包括步骤执行后的输入行数.输入行数.读入行数.更新行数等.此步骤可以直接拖入转换 ...

  8. tar命令打包指定目录及其文件,而不包括其上级目录

    想指定将/var目录下的log目录及其文件打包到当前目录,在压缩包解压时不包括/var目录,可使用如下方式: tar -zcvf log_bak.tar.gz -C /var/ log # 注意log ...

  9. 解决【Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modul】报错问题

    参考: https://blog.csdn.net/weixin_36146275/article/details/77447659

  10. 【神兵利器】Windows平台shellcode免杀加载器

    项目介绍 免杀,bypassav,免杀框架,nim,shellcode,使用nim编写的shellcode加载器,可快速生成免杀可执行文件 下载地址 Windows平台shellcode免杀加载器下载 ...