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




(10)

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

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

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


Answers

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


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

转到菜单Debug - > Windows - > Immediate


没有控制台默认听。 在调试模式下运行时,会连接一个控制台,但在生产环境中,您可能会怀疑这个消息,因为没有任何信息正在收听,所以消息不会出现在任何地方。


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


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

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

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


在ASP.NET应用程序中,我认为它会转到Output或Console窗口,该窗口在调试过程中可见。


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


通过尝试将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


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

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


我已经做了几次,每次最简单的方法是简单地返回一个CSV(逗号分隔值)文件。 Excel完全导入它,并且执行速度相对较快。





asp.net iis console.writeline