如何访问正在运行的方法的名称?

时间:2010-11-06 02:26:09

标签: c# reflection logging .net-4.0

我想将当前运行的方法的名称写入日志。我知道我可以手动将每个方法的名称键入到写入日志的字符串中,但我想要更自动化和可重用的东西。我认为这可以通过反射完成,但我不知道从哪里开始。

有任何建议或代码示例吗?谢谢!

3 个答案:

答案 0 :(得分:4)

System.Reflection.MethodBase.GetCurrentMethod().Name应该可以解决问题。

答案 1 :(得分:2)

查看System.Diagnostics.StackTrace类

System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame(0).GetMethod().Name;

请注意,这里有性能成本。在性能敏感的代码中,您需要小心使用它。

答案 2 :(得分:2)

您使用的是哪种日志框架?

在log4net中,在模式布局中使用%方法

<layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message - Method:%method%newline"/>
</layout>

请参阅:http://logging.apache.org/log4net/release/sdk/index.html

如果您使用的是NLog 2.0,则可以在布局中使用$ {callsite}。请参阅:https://github.com/nlog/nlog/wiki/Callsite-Layout-Renderer

这样你甚至不必自己照顾或使用方法名称。让日志框架为您完成。但要注意让Stackframe很慢。