저는 NLog 사용자이며 일반적으로 다음과 같이 요약됩니다.
var _logger = LogManager.GetCurrentClassLogger();
Log4Net에서 리플렉션을 거쳐야한다는 것이 조금 이상해 보였기 때문에 NLog 소스 코드를 살펴 보았습니다. 그리고 보라, 이것이 그들이 당신을 위해하는 일입니다.
[MethodImpl(MethodImplOptions.NoInlining)]
public static Logger GetCurrentClassLogger()
{
string loggerName;
Type declaringType;
int framesToSkip = 1;
do
{
#if SILVERLIGHT
StackFrame frame = new StackTrace().GetFrame(framesToSkip);
#else
StackFrame frame = new StackFrame(framesToSkip, false);
#endif
var method = frame.GetMethod();
declaringType = method.DeclaringType;
if (declaringType == null)
{
loggerName = method.Name;
break;
}
framesToSkip++;
loggerName = declaringType.FullName;
} while (declaringType.Module.Name.Equals("mscorlib.dll", StringComparison.OrdinalIgnoreCase));
return globalFactory.GetLogger(loggerName);
}
내 보일러 코드의 일부로 리플렉션을 붙여 넣는 대신 확장 또는 정적 메서드로 Log4Net에 대해 비슷한 것을 작성할 것이라고 생각합니다. :)