基本上我有一个网络服务,我正在尝试将某种使用情况登录进去。 为此,我创建了一个带有日志记录方法的类。 我在服务上实例化该类,然后在每个 Web 方法中调用日志记录方法。
我正在尝试找到一种方法来获取调用 loggong 方法的方法的名称
Public sub tstmethod
log_object.log_method
end sub
在这种情况下,我正在寻找的返回名称是“tstmethod”
我见过的每个地方都说可以使用
Dim stackframe As New Diagnostics.StackFrame
Return stackframe.GetMethod.Name.ToString
或者使用
Dim stackframe As New Diagnostics.StackFrame
Return stackframe.GetMethod.DeclaringType.FullName
我在日志记录方法中调用它
getmethod.name.tostring 返回日志记录方法的名称
getmethod.declaringtype.fullname 返回日志记录类的名称
无论我做什么,我都找不到一种方法来获取调用日志记录方法的方法的名称,在本例中为“tstmethod”
您需要使用适当的构造函数实例化
StackFrame
。例如,
Dim stackframe As New Diagnostics.StackFrame(1)
将跳过一个堆栈帧(日志记录方法本身)并获取该方法的调用者的帧。
也就是说 - 如果可能的话,我强烈建议使用标准日志记录机制,例如 log4net。
我觉得上面这句话可以写成一行:
MsgBox((New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name)
这将显示一个消息框,其中包含调用方法名称。
VB.Net
System.Reflection.MethodBase.GetCurrentMethod.Name()
你应该能够从 StackFrame 中获取它,构造函数告诉它有多少帧要沿着链向上移动,因此获取父级将使用 1 (帧是从零开始的,所以 0 是当前方法):
Dim stackTrace as New Diagnostics.StackFrame(1)
Return stackTrace.GetMethod.Name
不要尝试使用 StackFrame。它只能在调试模式下工作,这是应用程序速度的杀手。
在Release模式下无法获取此信息,您应该考虑更改设计并添加参数。
我将调用形式添加为所有子例程和函数的第一个参数 就像被调用的函数(me,para1,para2......)这样我就可以识别调用形式并在被调用的例程中使用它的名称或文本
你可以这样做:
Imports System.Runtime.CompilerServices
Private Sub LogError(message As String, <CallerMemberName> Optional caller As String = null)
'Logging logic here using caller
End Sub
我正在使用此代码来获取调用方法
string methodName = new StackFrame( 1, true ).GetMethod().Name;
methodName = " [" + methodName + "]";
return methodName;
记得添加命名空间Diagnostics