Console.WriteLine在ASP.NET中去了哪里?

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

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

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

如果您在.NET Reflector中查看Console类,则会发现如果进程没有关联的控制台,则Console.OutConsole.ErrorStream.Null (包装在TextWriter )支持,即Stream一个虚拟实现,基本上忽略了所有的input,并且没有输出。

所以它在概念上等价于/dev/null ,但实现更加简化:没有实际的I / O与null设备发生。

另外,除了调用SetOut ,没有办法configuration默认值。

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

我已经通过尝试将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; } } } 

Annd之后: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语句。

所以例如打开一个命令窗口并input:

 "C:\Program Files (x86)\IIS Express\iisexpress" /path:C:\Projects\Website1 /port:1655 

这假定您有一个网站目录在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> 

安排您的浏览器和命令窗口,以便您可以在屏幕上看到它们。 现在input你的浏览器: 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 

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

没有任何控制台默认听。 在debugging模式下运行时会附加一个控制台,但是在生产环境中,正如您所怀疑的那样,由于没有任何内容正在监听,因此该消息不会出现在任何地方。

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

进入菜单Debug – > Windows – > Immediate

在这里输入图像说明

ASP.NET中的TraceContext对象写入DefaultTraceListener ,输出到主机进程的标准输出 。 而不是使用Console.Write() ,如果使用Trace.Write ,则输出将转到过程的标准输出。

您可以使用System.Diagnostics.Process对象为您的站点获取ASP.NET进程,并使用OutputDataRecieved事件监视标准输出。

除非你在一个严格的控制台应用程序,否则我不会使用它,因为你不能真正看到它。 我会使用Trace.WriteLine()来debugging可以在生产中打开和closures的信息。

在ASP.NET应用程序中,我认为它将进入debugging期间可见的“输出”或“控制台”窗口。

如果你看看debugging窗口,你会看到console.writelines。

当IISExpress出现时,每个人都会感到困惑。 没有什么要读取控制台消息。 因此,例如,在ASPCORE MVC应用程序中,使用appsettings.json进行configuration,如果您使用的是IISExpress,则不执行任何操作。

现在你可以添加loggerFactory.AddDebug(LogLevel.Debug); 在“configuration”部分中,它至less会在“debugging输出”窗口中显示您的日志。

好消息CORE 2.0这一切都将改变: https : //github.com/aspnet/Announcements/issues/255