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




iis (8)

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

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

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

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

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


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

转到菜单Debug - > Windows - > Immediate


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


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


如果您正在使用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#" %>
<html>
<body>
    <form id="form1" runat="server">
    Hello!

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

    </form>
</body>
</html>

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

我通过将代码放入标记中的代码块来简化它,但code-behindcode-behind任何其他位置的控制台语句也会显示在此处。


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

现在你可以添加loggerFactory.AddDebug(LogLevel.Debug); 在你的配置部分,它至少会在调试输出窗口中显示你的日志。

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


通过尝试将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 : http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers


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





console.writeline