¿A dónde va Console.WriteLine en ASP.NET?
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.
Si usa System.Diagnostics.Debug.WriteLine(...)
en lugar de Console.WriteLine()
, podrá ver los resultados en la ventana Salida de Visual Studio.
Si observa la Console
clase en .NET Reflector , encontrará que si un proceso no tiene una consola asociada Console.Out
y Console.Error
está respaldado por Stream.Null
(envuelto dentro de un TextWriter
), que es una implementación ficticia 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 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 stdoutLogEnabled
y stdoutLogFile
:
<system.webServer>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
hostingModel="inprocess"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout" />
<system.webServer>