zoukankan      html  css  js  c++  java
  • C#添加程序执行时长监控日志

    /// <summary>
    /// C#添加程序执行时长监控日志
    /// </summary>
    public class StopwatchLog
    {
        static Task write;
        static List<string> Logs = new List<string>();
        static StopwatchLog()
        {
            write = Task.Run(() =>
            {
                while (true)
                {
                    try
                    {
                        Thread.Sleep(2000);
                        var logs = Logs;
                        Logs = new List<string>();
                        string file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "timewatch.log");
                        File.AppendAllLines(file, logs);
                    }
                    catch { }
                }
            });
        }
    
        /// <summary>
        /// 初始化请求
        /// </summary>
        public static void Start()
        {
            HttpContext.Current.Items["request"] = DateTime.Now.ToUniversalTime().Ticks.ToString();
        }
    
        /// <summary>
        /// 开始记录点
        /// </summary>
        /// <returns></returns>
        public static Stopwatch StartLog()
        {
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            return stopwatch;
        }
    
        /// <summary>
        /// 结束记录点
        /// </summary>
        /// <param name="stopwatch"></param>
        /// <param name="point"></param>
        public static void EndLog(Stopwatch stopwatch, string tag = "")
        {
            stopwatch.Stop();
    
            //当前堆栈信息
            StackTrace st = new StackTrace();
            StackFrame[] sfs = st.GetFrames();
            //过虑的方法名称,以下方法将不会出现在返回的方法调用列表中
            string _filterdName = "ResponseWrite,ResponseWriteError,";
            string _fullName = string.Empty;
            for (int i = 1; i < sfs.Length; ++i)
            {
                //非用户代码,系统方法及后面的都是系统调用,不获取用户代码调用结束
                if (StackFrame.OFFSET_UNKNOWN == sfs[i].GetILOffset()) break;
                string _methodName = sfs[i].GetMethod().Name;
                if (_filterdName.Contains(_methodName)) continue;
                _fullName = _methodName + "-" + _fullName;
            }
    
            _fullName = string.IsNullOrEmpty(tag) ? _fullName.TrimEnd('-') : _fullName + tag;
    
            var request = Convert.ToString(HttpContext.Current.Items["request"]);
            var log = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")},{request},{_fullName},{stopwatch.ElapsedMilliseconds}";
            Logs.Add(log);
        }
    }
    .NET Core 2.0 开源框架BitAdminCore作者。 框架演示:http://bit.bitdao.cn 框架使用:https://github.com/chenyinxin/cookiecutter-bitadmin-core 框架交流:QQ群202426919
  • 相关阅读:
    lua -- encode and decode
    lua二进制操作函数
    linux C++多线程使用pthread_cond 条件变量
    linux c 多线程编程--互斥锁与条件变量
    linux C--多线程基本概念及API函数
    linux C多线程编程
    2.5 linux C 进程与多线程入门--(5)使用互斥量进行同步
    linux C多线程编程入门(基本API及多线程的同步与互斥)
    2.4 linux C 进程与多线程入门--(4)简单多线程程序
    2.3 linux C 进程与多线程入门--(3)信号
  • 原文地址:https://www.cnblogs.com/chenyinxin/p/15033159.html
Copyright © 2011-2022 走看看