¿A dónde va Console.WriteLine en ASP.NET?

Resuelto Kevin Hakanson asked hace 15 años • 14 respuestas

En una aplicación J2EE (como una que se ejecuta en WebSphere), cuando 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 Console.WriteLine()? El proceso IIS debe tener stdin, stdout y stderr; pero ¿está la salida estándar asignada 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 ¿adónde va el resultado? Mi mejor información provino de esta discusión donde dicen que Console.SetOut()se puede cambiar TextWriter, pero aún no respondió la pregunta sobre cuál es el valor inicial de la Consola o cómo configurarlo en la configuración/fuera del código de tiempo de ejecución.

Kevin Hakanson avatar Sep 26 '08 10:09 Kevin Hakanson
Aceptado

Si usa System.Diagnostics.Debug.WriteLine(...)en lugar de Console.WriteLine(), podrá ver los resultados en la ventana Salida de Visual Studio.

Greg Bernhardt avatar May 18 '2009 21:05 Greg Bernhardt

Si observa la Consoleclase en .NET Reflector , encontrará que si un proceso no tiene una consola asociada Console.Outy Console.Errorestá respaldado por Stream.Null(envuelto dentro de un TextWriter), que es una implementación ficticia Streamque 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 simplificada: no se realizan E/S reales con el dispositivo nulo.

Además, aparte de llamar a SetOut, no hay forma de configurar el valor predeterminado.

Actualización 2020-11-02 : Como esta respuesta aún está reuniendo votos en 2020, probablemente debería tenerse en cuenta que en ASP.NET Core, generalmente hay una consola adjunta. Puede configurar el módulo ASP.NET Core IIS para redirigir toda la salida estándar y stderr a un archivo de registro a través de la configuración stdoutLogEnabledy stdoutLogFile:

<system.webServer>
  <aspNetCore processPath="dotnet"
              arguments=".\MyApp.dll"
              hostingModel="inprocess"
              stdoutLogEnabled="true"
              stdoutLogFile=".\logs\stdout" />
<system.webServer>
Ruben avatar Sep 16 '2009 10:09 Ruben