gpt4 book ai didi

c# - 在 Logging 中使用 StackFrame 和 MethodBase 的区别

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:24 27 4
gpt4 key购买 nike

我看到在 .NET 中实现登录时使用 StackFrame 和 MethodBase 的两个独立代码。

我知道 MethodBase 类提供有关方法和构造函数及其来源的信息。 StackFrame 表示对当前线程的调用堆栈的函数调用

第一个代码使用 StackFrame:

StackFrame frame = new StackFrame(1, false);
var method = frame.GetMethod();
var declaringType = method.DeclaringType;

return LogManager.GetLogger(declaringType);

第二个代码使用 MethodBase:

var method = MethodBase.GetCurrentMethod();
var declaringTye = method.DeclaringType;
return LogManager.GetLogger(declaringTye);

为什么要使用第一个代码而不是第二个代码,反之亦然?根据我自己的经验,我知道当您处于应用程序的 Release模式时,使用第一个代码会导致问题,因此需要进行一些更改。类似下面的内容。

do
{
StackFrame frame = new StackFrame(1, false);
var method = frame.GetMethod();
var declaringType = method.DeclaringType;
if (declaringType == null)
{
loggerName = method.Name;
break;
}
framesToSkip++;
loggerName = declaringType.FullName;
} while (declaringType.Module.Name.Equals("mscorlib.dll", StringComparison.OrdinalIgnoreCase));
return LogManager.GetLogger(loggerName);

最佳答案

GetCurrentMethod 不允许您调用堆栈。一些日志记录实现喜欢跳过日志系统的任何内部结构以使日志更相关。

关于c# - 在 Logging 中使用 StackFrame 和 MethodBase 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647665/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com