En una aplicación J2EE (como una que se ejecuta en WebSphere), cuando la uso System.out.println()
, mi texto pasa a la salida estándar, que la consola de administración de WebSphere asigna a un archivo.
En una aplicación ASP.NET (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 stdout está asignado a la versión de Windows de / dev / null o me falta un concepto clave aquí?
No estoy preguntando si debo iniciar sesión allí (uso log4net), pero ¿a dónde va la salida? Mi mejor información provino de esta discusión donde dicen que Console.SetOut()
puede cambiar el TextWriter
, pero aún no respondió 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.
fuente
Respuestas:
Si observa la
Console
clase en .NET Reflector , encontrará que si un proceso no tiene una consola asociadaConsole.Out
yConsole.Error
está respaldado porStream.Null
(envuelto dentro de aTextWriter
), que es una implementación ficticiaStream
que básicamente ignora todas las entradas, y no da salidaPor lo tanto, es conceptualmente equivalente a
/dev/null
, pero la implementación es más simplificada: no hay ninguna E / S real con el dispositivo nulo.Además, aparte de llamar
SetOut
, no hay forma de configurar el valor predeterminado.fuente
Si usa en
System.Diagnostics.Debug.WriteLine(...)
lugar deConsole.WriteLine()
, puede ver los resultados en la ventana Salida de Visual Studio.fuente
Encontré esta pregunta tratando de cambiar la salida del registro del DataContext a la ventana de salida. Entonces, para cualquiera que intente hacer lo mismo, lo que hice fue crear esto:
Y después de eso: dc.Log = new DebugTextWriter () y puedo ver todas las consultas en la ventana de salida (dc es el DataContext).
Eche un vistazo a esto para obtener más información: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers
fuente
TextWriter
?dc.Log = s => Debug.WriteLine(s);
.Si está utilizando IIS Express y lo inicia a través de un símbolo del sistema, dejará abierta la ventana de DOS y verá las
Console.Write
declaraciones allí.Entonces, por ejemplo, abra una ventana de comandos y escriba:
Esto supone que tiene un directorio de sitio web en C: \ Proyectos \ Sitio web1. Iniciará IIS Express y servirá las páginas en el directorio de su sitio web. Dejará abiertas las ventanas de comandos y verá información de salida allí. Digamos que tenía un archivo allí, default.aspx, con este código:
Organice su navegador y ventanas de comandos para que pueda verlos en la pantalla. Ahora escriba en su navegador:
http://localhost:1655/
. Verás Hola! en la página web, pero en la ventana de comandos verá algo comoLo hice simple al tener el código en un bloque de código en el marcado, pero aquí también se mostrará cualquier declaración de consola en su código subyacente o en cualquier otro lugar de su código.
fuente
System.Diagnostics.Debug.WriteLine(...);
lo pone en la ventana Inmediato en Visual Studio 2008.Vaya al menú Depurar -> Windows -> Inmediato :
fuente
Output
justo después deImmediate Window
¡Gracias!Simplemente no hay consola escuchando por defecto. Ejecutando en modo de depuración hay una consola conectada, pero en un entorno de producción es como sospechaba, el mensaje simplemente no va a ninguna parte porque nada está escuchando.
fuente
A menos que esté en una aplicación de consola estricta, no la usaría, porque realmente no puede verla. Usaría Trace.WriteLine () para la información del tipo de depuración que se puede activar y desactivar en producción.
fuente
El
TraceContext
objeto en ASP.NET escribe en lasDefaultTraceListener
salidas que se envían a la salida estándar del proceso del host . En lugar de usarConsole.Write()
, si usaTrace.Write
, la salida irá a la salida estándar del proceso.Puede usar el
System.Diagnostics.Process
objeto para obtener el proceso ASP.NET para su sitio y monitorear la salida estándar usando elOutputDataRecieved
evento.fuente
si usó NLog en su proyecto ASP.net, puede agregar un objetivo de depurador :
y escribe registros en este objetivo para los niveles que desea:
ahora tiene salida de consola como Jetty en la ventana "Salida" de VS, y asegúrese de estar ejecutando en modo de depuración (F5).
fuente
Esto es confuso para todos cuando se trata de IISExpress. No hay nada para leer los mensajes de la consola. Entonces, por ejemplo, en las aplicaciones ASPCORE MVC se configura usando appsettings.json que no hace nada si está usando IISExpress.
Por ahora, solo puede agregar loggerFactory.AddDebug (LogLevel.Debug); en su sección Configurar y al menos le mostrará sus registros en la ventana Salida de depuración.
Buenas noticias CORE 2.0, todo esto cambiará: https://github.com/aspnet/Announcements/issues/255
fuente
Mac, en modo de depuración hay una pestaña para la salida.
fuente
En una aplicación ASP.NET, creo que va a la ventana Salida o Consola que está visible durante la depuración.
fuente