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.Write
或Debug.Write
,绝不是Console.Write
。
【讨论】:
亲爱的 Danny,在 IIS 中部署 Web 应用程序(例如在系统定义的日志文件或 Windows 事件查看器或某处)后,是否有机会捕获 Trace.Write 和 Debug.Write 的输出普遍可用?) +1Trace.Write
或 Debug.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 输出? [复制]
Debug.WriteLine() 与 Console.WriteLine() 处理文化的方式不同。为啥?