我想将当前运行的方法的名称写入日志。我知道我可以手动将每个方法的名称键入到写入日志的字符串中,但我想要更自动化和可重用的东西。我认为这可以通过反射完成,但我不知道从哪里开始。
有任何建议或代码示例吗?谢谢!
答案 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很慢。