1

我有一个日志库,它提供了一个 GUI,允许最终用户逐个类地启用/禁用日志记录。这允许支持人员让最终用户启用登录感兴趣的类以解决问题,而不会用我们不关心的垃圾淹没日志(还有更多内容,但对于这个问题来说应该足够了) . GUI 必须列出所有使用日志库的类。

我过去(在 Win32 应用程序中)使用的方法是提供一个注册函数,该库的用户将调用该函数来列出使用该库的类。这可行,但很痛苦且容易出错。鉴于我现在在 .NET 中工作,我希望自己能够在运行时以某种方式获取这些类的列表,这样我就可以在不需要注册的情况下填充 GUI。

有没有办法做到这一点?

4

4 回答 4

1

当我们记录时,每个想要记录的类都会为其类型创建一个静态记录器实例。通过这种方法,您可以在创建每个实例时对其进行跟踪,并允许用户根据需要禁用日志。

private static readonly ILog LOG = LogManager.GetLog(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

但是,在加载类的静态成员之前,这自然不会被触发(我认为是在第一次访问类/类型时)所以我想你不会看到想要的类的完整列表是合理的登录,直到它们都被访问。

于 2012-05-28T14:36:13.030 回答
0

您可以创建一个新的StackTrace(这不仅用于异常报告),但速度不是很快......

于 2012-05-28T14:20:22.860 回答
0

是的,您可以使用反射。以下代码列出当前加载的所有类(和结构):

foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()
   foreach(Type type in asm.GetTypes()){   

   } 
}

AppDomain.CurrentDomain.GetAssemblies()将列出应用程序域中加载的所有程序集,然后使用GetTypes()列出程序集包含的所有类和结构。

于 2012-05-28T14:21:40.830 回答
0

4.5 - 简单。将所需的信息作为参数添加到被调用的方法中,对其进行注释,编译器完成其余工作。

http://www.wintellect.com/cs/blogs/jgarland/archive/2012/03/05/using-the-new-callerinfo-attributes-for-reliable-property-change-notifications.aspx有更多信息。

看起来像这样: private void OnPropertyChanged([CallerMemberName] String caller = null)

可悲的是没有类名;)所以,运气不好也在那里。

否则 - 没有快速可靠的方法,抱歉。

逐类启用/禁用日志记录。

我所做的是有一个通用记录器 FOR A 类(记录器)。这对错误是开放的,但它也允许我手动为另一个类记录一些东西——例如在辅助方法中。差不多和 QUITE 标准一样好(nlog 有类似的机制)。

于 2012-05-28T14:30:43.677 回答