Tôi là một người dùng NLog và điều này thường tổng hợp thành:
var _logger = LogManager.GetCurrentClassLogger();
Có vẻ hơi lạ khi bạn cần xem qua phần phản ánh trong Log4Net, vì vậy tôi đã xem qua mã nguồn NLog, và hãy lo và đây là những gì họ làm cho bạn:
[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);
}
Tôi đoán tôi sẽ viết một cái gì đó tương tự cho Log4Net dưới dạng tiện ích mở rộng hoặc phương thức tĩnh thay vì dán phản chiếu như một phần của mã nồi hơi của tôi :)