我看到了两个单独的代码,它们在实现日志记录StackFrame时使用了MethodBase和in.NET。
我知道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);为什么要使用第一个代码而不是第二个代码,反之亦然?根据我自己的经验,我知道当您处于应用程序的发布模式时,使用第一段代码将导致问题,因此需要进行一些更改。就像下面这样。
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);发布于 2018-02-07 01:40:48
GetCurrentMethod不允许您调用堆栈。一些日志实现喜欢跳过日志系统的任何内部,以使日志更加相关。
https://stackoverflow.com/questions/48647665
复制相似问题