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

Kev*_*son 301 asp.net iis console.writeline

在J2EE应用程序(如在WebSphere中运行的应用程序)中,当我使用时System.out.println(),我的文本转到标准输出,由WebSphere管理控制台映射到文件.

在ASP.NET应用程序(如在IIS中运行的应用程序)中,Console.WriteLine()go 的输出在哪里?IIS进程必须有stdin,stdout和stderr; 但是stdout映射到Windows版本的/ dev/null还是我错过了一个关键概念?

不是在问我是否应该登录(我使用log4net),但是输出在哪里?我最好的信息来自这个他们说可以改变的讨论,但它仍然没有回答关于控制台的初始值是什么,或者如何在config /在运行时代码之外设置它的问题.Console.SetOut()TextWriter

Gre*_*rdt 707

如果使用System.Diagnostics.Debug.WriteLine(...)而不是Console.WriteLine(),则可以在Visual Studio 的" 输出"窗口中查看结果.

  • 我会问Kevin一样的问题,但这是我一直在寻找的答案. (43认同)
  • 请注意,需要附加调试器才能在"输出"窗口中显示消息. (12认同)
  • 还有一点暗示; 如果要打印格式化的字符串,请使用Debug.Print而不是Debug.WriteLine来避免参数冲突(请参阅http://social.msdn.microsoft.com/Forums/ar/Vsexpressvcs/thread/f27bacd9-8b86-4f65- 95ca-8b30c9e2e915). (11认同)
  • 这不适用于本地IIS或其他什么?我似乎无法在输入中写入我的生命,尽管事实上我是用F5开始的(所以调试器是附加的).我知道我的代码正在执行,因为我可以写一个文件. (3认同)
  • 我不敢相信这个“​​答案”得到了多少票,因为它实际上并没有回答一个非常具体的问题“它去哪里”,而是建议更改代码,完全绕过最初的问题。作为对正确答案的评论,作为那些能够更改代码的人的替代方案,这会更好。 (2认同)

Rub*_*ben 192

如果你看一下.NET Reflector中的Console类,你会发现如果一个进程没有一个关联的控制台,并且由(包含在a中)支持,这是一个基本上忽略所有输入的虚拟实现,并且没有输出.Console.OutConsole.ErrorStream.NullTextWriterStream

因此它在概念上等同于/dev/null,但实现更加简化:使用null设备不会发生实际的I/O.

此外,除了呼叫之外SetOut,无法配置默认值.

  • 如果您确实希望将某些内容写入“输出”窗口,则可以使用System.Diagnostics.Debug.WriteLine(),在调试时可以查看该窗口。 (10认同)

Art*_*lho 25

我通过尝试将DataContext的Log输出更改为输出窗口来找到此问题.所以对于其他试图做同样事情的人来说,我所做的就是创造这个:

class DebugTextWriter : System.IO.TextWriter {
   public override void Write(char[] buffer, int index, int count) {
       System.Diagnostics.Debug.Write(new String(buffer, index, count));
   }

   public override void Write(string value) {
       System.Diagnostics.Debug.Write(value);
   }

   public override Encoding Encoding {
       get { return System.Text.Encoding.Default; }
   }
}
Run Code Online (Sandbox Code Playgroud)

在那之后:dc.Log = new DebugTextWriter(),我可以看到输出窗口中的所有查询(dc是DataContext).

有关详细信息,请查看此内容:http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers


小智 17

如果您使用的是IIS Express并通过命令提示符启动它,它将使DOS窗口保持打开状态,您将Console.Write在那里看到语句.

例如,打开命令窗口并输入:

"C:\Program Files (x86)\IIS Express\iisexpress" /path:C:\Projects\Website1 /port:1655
Run Code Online (Sandbox Code Playgroud)

假设您在C:\ Projects\Website1上有一个网站目录.它将启动IIS Express并提供您网站目录中的页面.它将使命令窗口保持打开状态,您将在那里看到输出信息.假设你有一个文件default.aspx,里面有这个代码:

<%@ Page Language="C#" %>
<html>
<body>
    <form id="form1" runat="server">
    Hello!

    <% for(int i = 0; i < 6; i++) %>
       <% { Console.WriteLine(i.ToString()); }%>

    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

安排浏览器和命令窗口,以便在屏幕上看到它们.现在输入您的浏览器:http://localhost:1655/.你会看到你好!在网页上,但在命令窗口中你会看到类似的东西

Request started: "GET" http://localhost:1655/
0
1
2
3
4
5
Request ended: http://localhost:1655/default.aspx with HTTP status 200.0
Run Code Online (Sandbox Code Playgroud)

我通过将代码放在标记的代码块中来简化,但代码隐藏或代码中其他任何地方的任何控制台语句也会在此处显示.


Nik*_*Nik 8

System.Diagnostics.Debug.WriteLine(...);将它放入Visual Studio 2008中的立即窗口.

转到菜单Debug - > Windows - > Immediate:

在此输入图像描述


Cra*_*ler 6

默认情况下根本没有控制台监听.在调试模式下运行时,附加了一个控制台,但是在生产环境中,它就像您所怀疑的那样,消息不会随处可见,因为没有任何内容正在侦听.


Cha*_*ham 5

除非您使用严格的控制台应用程序,否则我不会使用它,因为您看不到它。我将使用Trace.WriteLine()获得可在生产环境中打开和关闭的调试类型信息。


Sho*_*lil 5

尝试附加某种“后端调试器”,以将您的消息或数据记录到控制台或输出窗口,就像我们在节点控制台中所做的那样。

System.Diagnostics.Debug.WriteLine("Message" + variable)代替Console.WriteLine()

这样您就可以在 Visual Studio 的输出窗口(又称为控制台)中看到结果。