मैं एक 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 के लिए कुछ ऐसा ही लिखूंगा :)