¿Dónde consolas?WriteLine entrar ASP.NET?


En una aplicación J2EE (como una que se ejecuta en WebSphere), cuando uso System.out.println(), mi texto va a salida estándar, que se asigna a un archivo por la consola de administración de WebSphere.

En un ASP.NET aplicación (como una que se ejecuta en IIS), ¿a dónde va la salida de Console.WriteLine()? El proceso IIS debe tener un stdin, stdout y stderr; pero ¿está stdout asignado a la versión de Windows de /dev/null o me falta un concepto clave aquí?

No estoy preguntando si debo registrarme allí (uso log4net), pero ¿a dónde va la salida? Mi mejor información vino de esta discusión donde dicen que Console.SetOut() puede cambiar el TextWriter, pero todavía no respondió a la pregunta sobre cuál es el valor inicial de la Consola, o cómo configurarlo en config/fuera del código de tiempo de ejecución.

Author: P. Camilleri, 2008-09-26

11 answers

Si observa la clase Console en . NET Reflector, encontrará que si un proceso no tiene una consola asociada, Console.Out y Console.Error están respaldados por Stream.Null (envueltos dentro de un TextWriter), que es una implementación ficticia de Stream que básicamente ignora toda la entrada y no da salida.

Así que es conceptualmente equivalente a /dev/null, pero la implementación es más simplificada: no hay E/S reales teniendo lugar con el dispositivo nulo.

También, aparte de llamar SetOut, hay no hay forma de configurar el valor predeterminado.

 162
Author: Ruben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-29 23:02:29

Si usa System.Diagnostics.Debug.WriteLine(...) en lugar de Console.WriteLine(), entonces puede ver los resultados en la ventana Output de Visual Studio.

 632
Author: Greg Bernhardt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-20 21:12:35

He encontrado esta pregunta tratando de cambiar la salida de registro del DataContext a la ventana de salida. Así que para cualquiera que intente hacer lo mismo, lo que he hecho fue crear esto:

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 después de eso: dc.Log = new DebugTextWriter () y puedo ver todas las consultas en la ventana de salida (dc es el DataContext).

Echa un vistazo a esto para más información: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

 23
Author: Artur Carvalho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-09 15:32:41

Si está utilizando IIS Express y lo inicia a través de un símbolo del sistema, dejará abierta la ventana DOS, y verá instrucciones Console.Write allí.

Por ejemplo, abre una ventana de comandos y escribe:

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

Esto supone que tiene un directorio de sitio web en C:\Projects\Website1. Iniciará IIS Express y servirá las páginas en el directorio de su sitio web. Dejará las ventanas de comandos abiertas, y verá la información de salida allí. Digamos que tienes un archivo allí, predeterminado.aspx, con este código en él:

<%@ 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>

Organice su navegador y las ventanas de comandos para que pueda verlos a ambos en la pantalla. Ahora escriba en su navegador: http://localhost:1655/. Usted verá Hola! en la página web, pero en la ventana de comandos verá algo como

Request started: "GET" http://localhost:1655/
0
1
2
3
4
5
Request ended: http://localhost:1655/default.aspx with HTTP status 200.0

Lo simplifiqué al tener el código en un bloque de código en el marcado, pero cualquier instrucción de consola en su code-behind o en cualquier otro lugar de su código se mostrará aquí también.

 14
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-29 23:15:00

Simplemente no hay una consola de escucha por defecto. Corriendo en modo de depuración hay una consola adjunta, pero en un entorno de producción es como sospechabas, el mensaje simplemente no va a ninguna parte porque nada está escuchando.

 6
Author: Craig Tyler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-26 14:32:23

A menos que estés en una aplicación de consola estricta, no la usaría, porque realmente no puedes verla. Usaría Rastreo.WriteLine () para información de tipo depuración que se puede activar y desactivar en producción.

 4
Author: Charles Graham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-29 23:03:31

System.Diagnostics.Debug.WriteLine(...); lo introduce en la ventana inmediata de Visual Studio 2008.

Ir al menú Debug -> Windows -> Inmediata:

Introduzca la descripción de la imagen aquí

 4
Author: Nik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-29 23:12:11

El objeto TraceContext en ASP.NET escribe en el DefaultTraceListener que da salida al proceso host' salida estándar. En lugar de usar Console.Write(), si usa Trace.Write, la salida irá a la salida estándar del proceso.

Podría usar el objeto System.Diagnostics.Process para obtener ASP.NET procese para su sitio y supervise la salida estándar usando el evento OutputDataRecieved.

 3
Author: Brian Griffin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 17:27:56

Esto es confuso para todos cuando se trata de IISExpress. No hay nada para leer mensajes de consola. Así, por ejemplo, en las aplicaciones ASPCORE MVC se configura utilizando appsettings.json que no hace nada si está utilizando IISExpress.

Por ahora solo puede agregar LoggerFactory.AddDebug (LogLevel.Debug); en su sección Configure y al menos le mostrará sus registros en la ventana de salida de depuración.

Buenas noticias CORE 2.0 todo esto cambiará: https://github.com/aspnet/Announcements/issues/255

 0
Author: Chris Go,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-04 23:48:54

En un ASP.NET aplicación, creo que va a la salida o Consola ventana que es visible durante la depuración.

 -1
Author: Leon Tayson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-29 23:02:57

Si miras en la ventana de depuración verás consola.writelines.

 -1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-10 22:47:12