在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
如果使用System.Diagnostics.Debug.WriteLine(...)
而不是Console.WriteLine()
,则可以在Visual Studio 的" 输出"窗口中查看结果.
如果你看一下.NET Reflector中的Console
类,你会发现如果一个进程没有一个关联的控制台,并且由(包含在a中)支持,这是一个基本上忽略所有输入的虚拟实现,并且没有输出.Console.Out
Console.Error
Stream.Null
TextWriter
Stream
因此它在概念上等同于/dev/null
,但实现更加简化:使用null设备不会发生实际的I/O.
此外,除了呼叫之外SetOut
,无法配置默认值.
我通过尝试将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; } } }
在那之后: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
如果您使用的是IIS Express并通过命令提示符启动它,它将使DOS窗口保持打开状态,您将Console.Write
在那里看到语句.
例如,打开命令窗口并输入:
"C:\Program Files (x86)\IIS Express\iisexpress" /path:C:\Projects\Website1 /port:1655
假设您在C:\ Projects\Website1上有一个网站目录.它将启动IIS Express并提供您网站目录中的页面.它将使命令窗口保持打开状态,您将在那里看到输出信息.假设你有一个文件default.aspx,里面有这个代码:
<%@ Page Language="C#" %>
安排浏览器和命令窗口,以便在屏幕上看到它们.现在输入您的浏览器: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
我通过将代码放在标记的代码块中来简化,但代码隐藏或代码中其他任何地方的任何控制台语句也会在此处显示.
System.Diagnostics.Debug.WriteLine(...);
将它放入Visual Studio 2008中的立即窗口.
转到菜单Debug - > Windows - > Immediate:
默认情况下根本没有控制台监听.在调试模式下运行时,附加了一个控制台,但是在生产环境中,它就像您所怀疑的那样,消息不会随处可见,因为没有任何内容正在侦听.
除非您使用严格的控制台应用程序,否则我不会使用它,因为您看不到它。我将使用Trace.WriteLine()获得可在生产环境中打开和关闭的调试类型信息。