Console.WriteLine 在 ASP.net 生产环境中去哪里了?

Posted

技术标签:

【中文标题】Console.WriteLine 在 ASP.net 生产环境中去哪里了?【英文标题】:Where does Console.WriteLine go in ASP.net production environment? 【发布时间】:2012-09-22 14:11:05 【问题描述】:

在 IIS 中部署我的 asp.net Web 应用程序后,我是否有机会看到 Console.WriteLine 命令的输出? (不再有 Visual Studio)

我检查了这个问题:

Where does Console.WriteLine go in ASP.NET?

但问题是他们都在谈论调试/开发环境,Visual Studio的输出窗口可以用来检查那些行的输出。

真的有办法在不安装额外日志工具(例如 log4net)的情况下查看这些行的输出吗?

【问题讨论】:

与***.com/questions/10746828/… 非常相似,请参阅我对该问题的回答。 【参考方案1】:

Console.WriteLine(默认重定向到 Console.Out.WrlteLine)被写入Stream.Null,这意味着写入它们的东西会丢失,正如你提到的question。

要将Console.Out 重定向到另一个流,例如文件,请使用Console.SetOut,例如在global.asax 文件中的BeginRequest handler。这会将任何 Console.WriteLine 调用重定向到输出文件。请记住在 EndRequest 处理程序或类似位置关闭流。

正如其他人所说,Console.WriteLine 通常应避免在 Web 应用程序或通用库中出于这个原因。考虑使用日志库,例如log4net。

【讨论】:

【参考方案2】:

Console.Out 默认对应宿主进程的stdout 流。在 Windows 上,只有标记为控制台类型的可执行文件将其 stdout 流定向到控制台窗口 - 对于所有其他可执行类型(GUI 和服务进程),则 stdout 无处可去。

ASP.NET 在w3wp.exe 内运行,这是一个没有 GUI 的服务进程。正如@akton 指出的那样,它进入了一个空流,所以任何写入的内容都会丢失。

如果您想跟踪操作以进行调试(或者更确切地说是事后调试),请使用 Debug.WriteLine 或使用类似 log4net 的日志库。

【讨论】:

对 Debug.WriteLine 的出色调用。我只是想在我的 IIS 应用程序上获得一些快速计时。【参考方案3】:

我不认为你可以。负责任的开发人员可能会从他的代码中编写信息来帮助调试,但总是Trace.WriteDebug.Write,绝不是Console.Write

【讨论】:

亲爱的 Danny,在 IIS 中部署 Web 应用程序(例如在系统定义的日志文件或 Windows 事件查看器或某处)后,是否有机会捕获 Trace.Write 和 Debug.Write 的输出普遍可用?) +1 Trace.WriteDebug.Write 应该是这样(不使用记录器时)。【参考方案4】:

接受的答案是正确的。但是如果你想用你的鞋子把钉子钉在咖啡桌上(一个错误的目标和一个错误的工具),那么你需要停止 iis,并从控制台交互地运行它,通过远程桌面登录服务器并启动inetinfo.exe 带有来自 cmd.exe 提示符的适当开关。这是一个 MSDN 页面,它说明了旧版本 IIS 的技术:http://msdn.microsoft.com/en-us/library/aa291261(v=vs.71).aspx 我想它原则上仍然适用于新版本的 IIS。

如果您不想使用库,您始终可以使用 System.Diagnostics TraceSource,然后将您的跟踪重定向到开发中的 ConsoleTraceListeners (don't forget to attach a console),然后重定向到服务器环境中的文件或数据库侦听器。

【讨论】:

谢谢马修。您的解决方案也很重要。【参考方案5】:

您可以使用 DebugView 从那里获取在 IIS 上运行的 C#/.Net 编译应用程序的 Console.WriteLine() 的输出:https://technet.microsoft.com/en-us/sysinternals/bb896647

【讨论】:

【参考方案6】:

使用 MessageBox,它有很大帮助。 任何你想观察的都放在消息框里

【讨论】:

亲爱的拉文德拉。它实际上是一个部署在 IIS 中的 SOAP Web 服务,而不是一个 winform 应用程序。

以上是关于Console.WriteLine 在 ASP.net 生产环境中去哪里了?的主要内容,如果未能解决你的问题,请参考以下文章

C#中的format和console.writeline有啥区别

Console.Writeline 对性能的影响

如何包含行号和文件名 Console.WriteLine 输出? [复制]

Debug.WriteLine() 与 Console.WriteLine() 处理文化的方式不同。为啥?

C#里面Console.Write与Console.WriteLine有啥区别????

Console.WriteLine 不输出到 VS 2017 中的输出窗口