如何检测我是否在控制台中运行

Ben*_*ter 16 .net c# vb.net logging

是否有一种简单的方法可以让代码库自动检测是否从控制台应用程序或Windows应用程序调用它?我希望我的库不报告Windows事件日志,如果它是从控制台窗口调用,而是报告给控制台窗口.但是,如果它不在控制台窗口中运行,则应报告给Windows事件日志.

我考虑过要求我的日志记录组件传递日志目标,但如果它本身可以自动处理这两个目标,它会很整洁.我还没有需要像log4net这样广泛的东西,事实上,如果有必要提供支持来记录数据库/文件和其他未知的日志记录目标,那么我可能会推荐这样的解决方案.现在,只是让我的组件自动检测环境并根据环境登录到控制台或事件日志就足够了.

Gre*_*g D 8

从架构上讲,将日志记录上下文传递到库组件是正确的选择.图书馆没有,实际上也不应该知道它正在运行的环境的大量背景.

因为你想在库中本地支持这两个特殊情况,我建议采用统一的方法.

  1. 继续创建调用者控制的更通用的日志记录入口点/旋钮.
  2. 创建一个单独的入口点/旋钮,自动为您想要自动支持的案例设置通用入口点/旋钮.

尽管如此,根据您的描述,这似乎太复杂了.您是否考虑过在诊断集合中使用适当的TraceListener,其中控制台应用程序添加适当的TraceListener以输出到控制台,非控制台应用程序添加相应的EventLog TraceListener以输出到Windows事件日志?这具有与所有内置.net日志记录支持一起工作的附加优势,而不假设任何外部依赖性(例如,log4net).


小智 7

刚发现"Console.Title"将是Windows应用程序中的空白字符串,它将自动在控制台应用程序中设置.

但仍然是一个黑客.