¿Dónde está Console.WriteLine en ASP.NET?
iis (11)
A menos que estés en una aplicación de consola estricta, no la usaría, porque realmente no puedes verla. Usaría Trace.WriteLine () para la información de tipo de depuración que se puede activar y desactivar en la producción.
En una aplicación J2EE (como una que se ejecuta en WebSphere), cuando uso System.out.println()
, mi texto se va 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 de IIS debe tener un stdin, stdout y stderr; pero ¿está stdout asignado a la versión de Windows de / dev / null o me estoy perdiendo un concepto clave aquí?
No pregunto si debo iniciar sesión allí (uso log4net), pero ¿a dónde va la salida? Mi mejor información provino de esta discussion 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 establecerlo en config / outside of runtime código.
El objeto TraceContext
en ASP.NET escribe en el DefaultTraceListener
que da salida a la salida estándar del proceso del host. 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 el proceso ASP.NET para su sitio y monitorear la salida estándar usando el evento OutputDataRecieved
.
En una aplicación ASP.NET, creo que va a la ventana Salida o Consola que está visible durante la depuración.
Esto es confuso para todos cuando se trata de IISExpress. No hay nada para leer los mensajes de la consola. Así, por ejemplo, en las aplicaciones de 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 Configurar y al menos le mostrará sus registros en la ventana de resultados de depuración.
Buenas noticias CORE 2.0, todo esto cambiará: https://github.com/aspnet/Announcements/issues/255
He encontrado esta pregunta al intentar cambiar la salida del registro de DataContext a la ventana de salida. Así que para cualquier otra persona que intente hacer lo mismo, lo que hice 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; }
}
}
Y después de eso: dc.Log = new DebugTextWriter () y puedo ver todas las consultas en la ventana de resultados (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
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 declaraciones de Console.Write
allí.
Entonces, por ejemplo, abre una ventana de comando y escribe:
"C:/Program Files (x86)/IIS Express/iisexpress" /path:C:/Projects/Website1 /port:1655
Esto supone que tiene un directorio de sitios web en C: / Projects / Website1. Iniciará IIS Express y servirá las páginas en el directorio de su sitio web. Dejará abiertas las ventanas de comando y verá información de salida allí. Digamos que tenía un archivo allí, default.aspx, con este código:
<%@ 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 comando para que pueda verlas 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 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 declaración de consola en su code-behind o en cualquier otra parte de su código se mostrará aquí también.
Si miras en la ventana de depuración, verás console.writelines.
Si observa la clase de la 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
( Stream.Null
dentro de un TextWriter
), que es una implementación ficticia de Stream
que básicamente ignora todas las entradas y no da salida.
Por lo tanto, es conceptualmente equivalente a /dev/null
, pero la implementación es más ágil: no se está realizando ninguna E / S real con el dispositivo nulo.
Además, aparte de llamar a SetOut
, no hay manera de configurar el valor predeterminado.
Si usa System.Diagnostics.Debug.WriteLine(...)
lugar de Console.WriteLine()
, puede ver los resultados en la ventana de resultados de Visual Studio.
Simplemente no hay consola de escucha por defecto. Al ejecutarse en el modo de depuración, hay una consola adjunta, pero en un entorno de producción es como sospechaba, el mensaje simplemente no se va a ninguna parte porque nada está escuchando.
System.Diagnostics.Debug.WriteLine(...);
lo introduce en la ventana Inmediato en Visual Studio 2008.
Ir al menú Depurar -> Windows -> Inmediato :