zoukankan      html  css  js  c++  java
  • 通过函数栈空间获取当前调用函数 南京酷得软件

    关于StackTrace的基础可以参见浅析StackTrace顽强的灰太狼)。

    我们在设计日志模块时通常会记录两种信息:

    1)软件运行的业务数据

    2)软件运行的技术参数(如当前调用的函数堆栈)。

     一下通过一下方法可以获取当前调用的函数:

    获取调用函数
     1 private static string GetCaller()
     2         {
     3             StackTrace stackTrace = new StackTrace();           // get call stack
     4             StackFrame[] stackFrames = stackTrace.GetFrames();  // get method calls (frames)
     5 
     6             int i = 1;
     7             for (; i < stackFrames.Length; i++)
     8             {
     9                 StackFrame stackFrame = stackFrames[i];
    10                 if (stackFrame.GetMethod() != null)
    11                 {
    12                     string typeName = stackFrame.GetMethod().ReflectedType == null ? stackFrame.GetMethod().Name : stackFrame.GetMethod().ReflectedType.Name;
    13                     string methodName = stackFrame.GetMethod().Name;
    14                     if ("LogHelper".Equals(typeName) && ("WriteMessage".Equals(methodName) || "WriteLog".Equals(methodName)))
    15                     {
    16                         i++;
    17                     }
    18                     else
    19                     {
    20                         if (stackFrames.Length >= i + 1)
    21                         {
    22                             stackFrame = stackFrames[i];
    23                             return stackFrame.GetMethod().ReflectedType == null ? stackFrame.GetMethod().Name : stackFrame.GetMethod().ReflectedType.Name + "." + stackFrame.GetMethod().Name;
    24                         }
    25                         else
    26                         {
    27                             break;
    28                         }
    29                     }
    30                 }
    31             }
    32 
    33             return "";
    34         }

    其中:

    if ("LogHelper".Equals(typeName) && ("WriteMessage".Equals(methodName) || "WriteLog".Equals(methodName)))

    是用于判断是否为当前日志模块的方法,如果是则忽略。

    公司网站: http://www.codersoft.cn 专业开发: 气象软件、监狱网上购物系统、两法衔接平台
  • 相关阅读:
    Air-WIFI使用方法
    libeasy代码学习:一次简单的TCP请求处理流程
    log_pipe日志收集分析系统介绍
    asp.net 项目在 IE 11 下出现 “__doPostBack”未定义 的解决办法
    用命令行实现“一键休眠”
    C#几个经常用到的字符串的截取
    MYSQL存储过程怎么写
    如何用myeclipse和eclipse搭建安卓开发环境
    C#随机生成不重复字符串
    Inno setup 简单打包教程
  • 原文地址:https://www.cnblogs.com/sucsy/p/1826091.html
Copyright © 2011-2022 走看看