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.Out
和Console.Error
由Stream.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