c#将方法传递给参数进行记录

时间:2019-01-25 23:08:11

标签: c# .net

我正在实现简单的日志记录,我想做下面的事情

public int SomeMethod(int x)
{
  Log(SomeMethod,"here is a log entry);
}

在Log方法中,我想从方法中解析出类名,并将方法名和类名打印到日志文件中。

是否可以做看起来像上面一样简单或类似的事情?

2 个答案:

答案 0 :(得分:-1)

尝试使用反射

var currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
var currentCalssName = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;

或者您可以像这样实现Log方法

public static void Log<TCallerClass>(string text, [CallerMemberName]string method = "")
{
var callerMethodName = method;
var callerCalssName = typeof(TCallerClass).FullName;
}

用法:Log<YourClass>("here is a log entry");

public static void Log(string text)
{
var stackFrame = new StackFrame(1, true);
var callerMethodName = stackFrame.GetMethod().Name;
var callerCalssName = stackFrame.GetMethod().DeclaringType.Name;
}

用法:Log("here is a log entry");

答案 1 :(得分:-1)

如果您使用的是C#6或更高版本,则可以使用nameof

public int SomeMethod(int x)
{
  Log(nameof(SomeMethod), "here is a log entry");
}