Je suis un utilisateur de NLog, et généralement cela se résume à :
var _logger = LogManager.GetCurrentClassLogger();
Il semblait un peu étrange que vous deviez passer par la réflexion dans Log4Net, alors j'ai jeté un coup d'œil dans le code source de NLog, et voilà ce qu'ils font pour vous :
[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);
}
Je suppose que j'écrirais quelque chose de similaire pour Log4Net en tant qu'extension ou méthode statique au lieu de coller la réflexion dans le code de mon boiler :)