使用反射封装Log4Net动态获取调用者类型
平时使用Log4Net记录日志时候都在每个类中声明ILog的实例,以便可以获取当前日志的类名。
private log4net.ILog _Log = log4net.LogManager.GetLogger(typeof(MainWindow));
方法虽然可行,但是每个类中都需要声明比较繁琐。
使用反射方式可以动态获取调用者的类型
public static class Util
{
public static void LogUtil(string strlog)
{
StackTrace trace = new StackTrace();
StackFrame frame = trace.GetFrame(1);
MethodBase method = frame.GetMethod();
String nameSpace = method.ReflectedType.Namespace;
String name = method.ReflectedType.Name;
Assembly assembly = method.ReflectedType.Assembly;
Type type =( from t in assembly.GetTypes()
where t.IsClass && t.Namespace == nameSpace && t.Name == name
select t).FirstOrDefault();
log4net.ILog log = log4net.LogManager.GetLogger(type);
log.Info(strlog);
}
}