首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StackFrame和MethodBase在测井中的区别

StackFrame和MethodBase在测井中的区别
EN

Stack Overflow用户
提问于 2018-02-06 16:31:17
回答 1查看 296关注 0票数 2

我看到了两个单独的代码,它们在实现日志记录StackFrame时使用了MethodBase和in.NET。

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

第一个代码使用StackFrame:

代码语言:javascript
复制
StackFrame frame = new StackFrame(1, false);
var method = frame.GetMethod();
var declaringType = method.DeclaringType;

return LogManager.GetLogger(declaringType);

第二个代码使用MethodBase:

代码语言:javascript
复制
var method = MethodBase.GetCurrentMethod();
var declaringTye = method.DeclaringType;
return LogManager.GetLogger(declaringTye);

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

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-07 01:40:48

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48647665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档