Net Core教程

C#添加程序执行时长监控日志

本文主要是介绍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);
    }
}

 

这篇关于C#添加程序执行时长监控日志的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!