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
  • 相关阅读:
    C#利用HttpWebRequest进行post请求的示例(HTTPS)
    以文件流的方式读取本地文件
    C#读取xml文件指定节点下的值
    C# get post 的方法
    SQL2008安装后激活方式以及提示评估期已过解决方法(转)
    python 左移右移 2个数交换
    python 循环内部添加多个条件判断会出现越界
    python __new__ __init__ __del__
    python 模块中__all__作用
    Python urllib的urlretrieve()函数解析 (显示下载进度)
  • 原文地址:https://www.cnblogs.com/chenyinxin/p/15033159.html
Copyright © 2011-2022 走看看