使用log4net声明为:
private readonly ILog log =
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType());
Run Code Online (Sandbox Code Playgroud)
在异步方法或任务中,如下所示:
public async void CheckSomething()
{
log.Info(null);
//....
}
Run Code Online (Sandbox Code Playgroud)
日志MoveNext而不是CheckSomething.知道如何让它记录一个实际的方法名称?
我编写了一个日志类和一个函数,如下面的代码所示:
Log(System.Reflection.MethodBase methodBase, string message)
Run Code Online (Sandbox Code Playgroud)
每次我记录某些东西时,我也会从methodBase.Name和methodBase.DeclaringType.Name中记录类名.
我阅读了以下文章使用Get CurrentMethod,我注意到这个方法很慢.
我应该使用this.GetType()而不是System.Reflection.MethodBase,或者我应该在我的日志中手动记录类/方法名称,例如Log("ClassName.MethodName","log message")?最佳做法是什么?
我正在尝试使用此帖子中找到的类,但它需要一个MethodBase才能运行.
我读了什么是获取MethodBase对象的最快方法?但我无法得到任何解决方案.
我需要做的是从函数中获取MethodBase对象.
例如,为Console类的静态函数WriteLine()获取MethodBase,或者为List <>的非静态函数Add()获取MethodBase.
谢谢你的帮助!
反正有没有检查方法是否使用PInvoke?我正在使用MethodBase循环遍历程序集中的所有方法,但我想检查该方法是否使用PInvoke.这是我正在使用的代码:
foreach (MethodBase bases in mtd.GetType().GetMethods())
{
//check if the method is using pinvoke
}
Run Code Online (Sandbox Code Playgroud)
另外,如果有可能,我怎么能检查正在使用的DLL和被调用的函数/入口点?
我有一个类,它有一些静态方法.我还有另一个类继承我的第一个类,如下所示;
public class Business
{
public static DataTable Get()
{
}
}
public class Model : Business
{
public int ID { get; set; }
public string CompanyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我用它如下;
Model.Get();
Run Code Online (Sandbox Code Playgroud)
在Do方法内部我尝试捕获Model类的类型.我可以在Do方法中捕获下面的Business类类型;
public static DataTable Get()
{
Type t = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}
Run Code Online (Sandbox Code Playgroud)
但我无法捕捉到Model类的类型.我怎样才能做到这一点?
注意: Business类中的Get方法选择从哪个类调用它的列.这就是我需要Model类名称的原因.Model类的原因名称将是表的名称,它将从表Model中选择列.
注2:通常我喜欢使用它;
Business.Get<Model>();
Run Code Online (Sandbox Code Playgroud)
我可以从Model表中获取所有数据.但我尝试使用它;
Model.Get();
Run Code Online (Sandbox Code Playgroud) c# ×6
methodbase ×6
reflection ×4
.net ×1
async-await ×1
log4net ×1
methodinfo ×1
performance ×1
pinvoke ×1