Windows服务中的Console.WriteLine()?

我目前正在使用TopShelf和控制台应用程序来创建Windows服务。 当我将代码作为控制台应用程序运行时,我使用一些Console.WriteLine()来输出结果。 一旦代码执行了它应该执行的操作,我将控制台应用程序安装为Windows服务。

即使Windows服务无法写入控制台,离开Console.WriteLine()代码是否有任何缺点? 如果我将Console.WriteLine()留在那里,是否存在代码不稳定的风险?

输出将被丢弃 。

在Windows服务中没有控制台,因此将丢弃Console.Write *输出。 有很多选择:

  1. System.Diagnostics.Trace类具有与Console类类似的接口,因此您可以非常轻松地将代码迁移到此类。
  2. 然后可以将其配置为输出到文件。 您可以使用System.Diagnostics.EventLog类写入事件日志,然后可以使用事件查看器进行监视。
  3. 您可以使用非常灵活的第三方开源log4net库。

不,控制台类将安全地写入STDOUT,但您将看不到输出。

如果使用System.Diagnostics.Tracefunction,则可以使用侦听器和开关重定向输出。 如果使用TRACE符号进行编译,则将包含代码。 如果不添加TRACE,则不会将其编译到项目中。

如果您将服务作为控制台运行以进行调试,则默认情况下Trace将输出到控制台。 我已经开始使用Trace而不是Debug或Console写入,因为我可以从配置文件中将跟踪信息输出到文件,屏幕,数据库等的任意组合。

在Windows Server 2008R2之前,输出始终被丢弃。 在该OS上安装的服务中保留console.writeline(),启动/运行服务时会出现错误1067,具体取决于writeline()的位置。