gpt4 book ai didi

c# - 在生产环境中使用 StackTrace 类获取调用方法信息

转载 作者:太空狗 更新时间:2023-10-29 21:15:24 33 4
gpt4 key购买 nike

我们有一个“日志”类,它使用 Relection.MethodBase 将当前类信息发送到日志。

reflection.MethodBase 的东西发生在类本身。

但是,我想将这些东西移动到单个外部“日志”单例类型类中。

在这种情况下,外部日志类需要获取调用信息,而不是当前方法信息。我正在使用堆栈跟踪来执行此操作,它不在 Reflection 命名空间中。

我能保证在生产环境中会有“那个”特定信息(调用方法)吗?

 var stackTrace = new StackTrace();
return LogManager.GetLogger(stackTrace.GetFrame(1).GetMethod().DeclaringType);

干杯!

最佳答案

是的,即使在没有任何 PDB 的“发布”构建中,您也会在堆栈跟踪中获得方法名称。但我个人认为这是一个 code smell .它意味着一个非常脆弱的代码路径(例如,如果您创建一个调用 Write 方法的 WriteLine 方法会发生什么,在这种情况下您是否查看调用者的调用者?)。在每次日志记录调用时拍摄堆栈跟踪的快照可能也不便宜。

我最近posted a question about using MEF to inject a logger进入我的类(class),我也想将类型名称与日志数据相关联。 MEF 对我来说效果很好,因为我能够为每个想要使用它的类导入一个 ILogger 实例,并且在导入 ILogger 实例时,我会将其 Category 属性设置为当前类的名称。没有反射,没有堆栈跟踪。它对我来说效果很好。

关于c# - 在生产环境中使用 StackTrace 类获取调用方法信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2734596/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com