65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 中记录方法名

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (21投票s)

2004 年 8 月 12 日

1分钟阅读

viewsIcon

214264

downloadIcon

1

本文概述了获取当前方法名和父方法名以用于日志记录的方法。

引言

在 .NET 之前,我们一直在寻找一种将当前方法名记录到日志文件中的方法,以便进行更好的日志记录。但是,没有功能可以帮助实现这一点,这成了一个未完成的任务。

但是,有了 .NET,我们可以轻松地找到当前方法名或父方法名。这是通过 System.DiagnosticsSystem.Reflection 命名空间中的 StackFrameStackTraceMethodBase 类实现的。

  • StackFrame 提供有关当前进程堆栈调用中的函数调用的信息。
  • StackTraceStackFrame 的集合。
  • MethodBase 是一个抽象类,包含有关当前方法的信息。

注意:当方法中发生异常时,异常对象包含对 StackTrace 对象的引用,该引用可用于记录方法名。但是,为了在没有生成错误的情况下记录方法名,我们需要使用 StackFrame 类从堆栈中读取它。

在示例中,MethodBase 对象将引用由 StackFrame 对象返回的堆栈调用中的当前函数。要获取父方法,我们将使用 StackTrace 获取父级的 StackFrame 对象。

创建一个新的控制台应用程序

添加命名空间

using System.Diagnostics;
using System.Reflection;

创建一个名为 WhatsMyName 的新静态函数,并从 Main 函数调用它。

[STAThread]
static void Main(string[] args)
{
    WhatsMyName();
}
// function to display its name
private static void WhatsMyName()
{
    StackFrame stackFrame = new StackFrame();
    MethodBase methodBase = stackFrame.GetMethod();
    Console.WriteLine(methodBase.Name ); // Displays “WhatsmyName”
    WhoCalledMe();
}
// Function to display parent function
private static void WhoCalledMe()
{
    StackTrace stackTrace = new StackTrace();
    StackFrame stackFrame = stackTrace.GetFrame(1);
    MethodBase methodBase = stackFrame.GetMethod();
    // Displays “WhatsmyName”
    Console.WriteLine( " Parent Method Name {0} ", methodBase.Name ); 
}

注意:此功能在 .NET Compact Framework 中不可用,因为 StackFrame 类不可用。对于这种情况,您需要使用相同的方法,手动将方法名传递给日志记录函数。

© . All rights reserved.