6

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

我检查了这个问题:

Console.WriteLine 在 ASP.NET 中的位置在哪里?

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

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

4

6 回答 6

13

Console.WriteLine (默认重定向到 Console.Out.WrlteLine )被写入Stream.Null,这意味着写入它们的东西会丢失,根据您提到的问题。

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

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

于 2012-09-22T14:26:21.927 回答
3

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

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

如果您想跟踪调试操作(或者更确切地说,事后调试),请使用Debug.WriteLine或使用类似log4net.

于 2012-09-22T14:28:40.133 回答
1

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

如果您不想使用库,则始终可以使用 System.Diagnostics TraceSource,然后将跟踪重定向到开发中的 ConsoleTraceListeners(不要忘记附加控制台),然后再重定向到服务器环境中的文件或数据库侦听器。

于 2012-09-22T20:11:28.860 回答
1

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

于 2012-09-22T14:17:21.207 回答
1

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

于 2016-01-08T15:36:55.643 回答
0

使用 MessageBox,它有很大帮助。
无论你想观察什么都放在消息框里

于 2012-09-22T14:22:26.200 回答