Dove va Console.WriteLine in ASP.NET?


313

In un'applicazione J2EE (come quella in esecuzione in WebSphere), quando uso System.out.println(), il mio testo passa allo standard, che viene mappato su un file dalla console di amministrazione di WebSphere.

In un'applicazione ASP.NET (come quella in esecuzione in IIS), dove va l'output di Console.WriteLine()? Il processo IIS deve avere uno stdin, uno stdout e uno stderr; ma stdout è mappato alla versione Windows di / dev / null o mi manca un concetto chiave qui?

Non sto chiedendo se devo accedere lì (utilizzo log4net), ma dove va l'output? Le mie migliori informazioni sono venute da questa discussione in cui dicono che Console.SetOut()può cambiare il TextWriter, ma non ha ancora risposto alla domanda su quale sia il valore iniziale della console o su come impostarlo in config / al di fuori del codice di runtime.


In realtà andrebbe allo STDOUT del processo di lavoro ASP.NET. Dove è indicato, non ne sono sicuro.
FlySwat,

2
Questa è la domanda: dove va STDOUT?
Kevin Hakanson,

35
apparentemente nessuno lo sa, ma tutti lo usano nei loro esempi. wtf
Jason,

se stavi cercando scopi di debug, farei riferimento alla risposta @Greg Bernhardt di seguito.
Ram

1
@KevinHakanson FWIW tutti questi anni dopo, stdout per qualsiasi processo è stato scelto dal suo genitore, il processo che lo ha avviato. In questo caso, il genitore sarebbe IIS. Questo potrebbe indicarti la giusta direzione .
jpaugh,

Risposte:


197

Se guardi la Consoleclasse in .NET Reflector , scoprirai che se un processo non ha una console associata, Console.OuteConsole.Error sono supportati da Stream.Null(racchiuso in a TextWriter), che è un'implementazione fittizia Streamche praticamente ignora tutti gli input, e non dà output.

Quindi è concettualmente equivalente a /dev/null, ma l'implementazione è più snella: non esiste un I / O effettivo che si verifica con il dispositivo null.

Inoltre, a parte la chiamata SetOut, non è possibile configurare l'impostazione predefinita.


18
Utilizzare System.Diagnostics.Debug.WriteLine () se si desidera effettivamente scrivere qualcosa nella finestra Output, che è possibile visualizzare durante il debug.
Ε Г И І И О

743

Se si utilizza System.Diagnostics.Debug.WriteLine(...)invece di Console.WriteLine(), è possibile visualizzare i risultati nella finestra Output di Visual Studio.


45
Avrei fatto la stessa domanda di Kevin, ma questa è la risposta che avrei cercato.
Zasz,

11
Un altro piccolo suggerimento; se stai stampando una stringa formattata, usa Debug.Print invece di Debug.WriteLine per evitare un conflitto di argomenti (vedi social.msdn.microsoft.com/Forums/ar/Vsexpressvcs/thread/… ).
Nicholas Riley,

12
Si noti che è necessario allegare il debugger affinché i messaggi vengano visualizzati nella finestra Output.
Cosmin,

4
Questo non funziona per IIS locale o qualcosa del genere? Non riesco a scrivere sull'output per tutta la vita di me, nonostante stia iniziando con F5 (quindi il debugger è collegato). So che il mio codice è in esecuzione perché posso scrivere bene su un file.
Kat,

@Cosmin A quale esatto .exe dovrei allegare in VS?
Grace,

26

Ho trovato questa domanda provando a cambiare l'output Log di DataContext nella finestra di output. Quindi, per chiunque cercasse di fare lo stesso, quello che ho fatto è stato creare questo:

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; }
   }
}

Dopo ciò, annd: dc.Log = new DebugTextWriter () e posso vedere tutte le query nella finestra di output (dc è il DataContext).

Dai un'occhiata a questo per maggiori informazioni: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers


Perché non usare solo un wrapper statico, dato che stai avvolgendo metodi completamente statici? Perché perdere tempo TextWriter?
Kat,

1
Puoi anche usare dc.Log = s => Debug.WriteLine(s);.
Rudey,

1
Application_Start: System.Console.SetOut (new DebugTextWriter ());
Stefan Steiger,

Ancora meglio, Console.SetOut (nuovo DebugTextWriter ());
Alde,

18

Se si utilizza IIS Express e lo si avvia tramite un prompt dei comandi, la finestra DOS verrà aperta e verranno visualizzate le Console.Writeistruzioni lì.

Quindi, ad esempio, apri una finestra di comando e digita:

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

Ciò presuppone che si disponga di una directory del sito Web in C: \ Projects \ Website1. Avvierà IIS Express e servirà le pagine nella directory del tuo sito web. Lascerà aperte le finestre di comando e lì vedrai le informazioni di output. Supponiamo che tu abbia un file lì, default.aspx, con questo codice:

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

Disporre il browser e le finestre di comando in modo da poterle vedere entrambe sullo schermo. Ora digitate nel browser: http://localhost:1655/. Vedrai Ciao! sulla pagina web, ma nella finestra di comando vedrai qualcosa di simile

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

L'ho reso semplice inserendo il codice in un blocco di codice nel markup, ma anche tutte le istruzioni della console nel code-behind o in qualsiasi altra parte del codice verranno visualizzate qui.


+1 Uso sempre IIS Express durante lo sviluppo per questo motivo. L'output della console ha un valore inestimabile, utilizzato nella parte posteriore come la console javascript nella parte frontale. Salva un sacco di tempo il debug, invece di utilizzare un registro del server basato su file. Non è necessario ignorare la gestione delle eccezioni "amichevole": mantenere la bella pagina del browser "oops" e visualizzare l'eccezione sulla console, facile da vedere.
ingrediente_15939

9

System.Diagnostics.Debug.WriteLine(...);entra nella finestra immediata in Visual Studio 2008.

Vai al menu Debug -> Windows -> Immediatamente :

Inserisci qui la descrizione dell'immagine


Nel mio Visual Studio 2012, ho seguito quello che hai detto, ma la stringa è apparsa Outputproprio accanto al Immediate WindowThanks!
WTFZane,

6

Non c'è semplicemente nessuna console in ascolto di default. In esecuzione in modalità debug è collegata una console, ma in un ambiente di produzione è come sospettavi, il messaggio non va da nessuna parte perché nulla è in ascolto.



3

L' TraceContextoggetto in ASP.NET scrive sull'output standard dell'output delDefaultTraceListener processo host . Invece di utilizzare , se si utilizza , l'output passerà all'output standard del processo.Console.Write()Trace.Write

È possibile utilizzare l' System.Diagnostics.Processoggetto per ottenere il processo ASP.NET per il sito e monitorare l'output standard utilizzando l' OutputDataRecievedevento.


1

se ti è capitato di usare NLog nel tuo progetto ASP.net, puoi aggiungere un target Debugger :

<targets>
    <target name="debugger" xsi:type="Debugger"
            layout="${date:format=HH\:mm\:ss}|${pad:padding=5:inner=${level:uppercase=true}}|${message} "/>

e scrive i log su questo target per i livelli desiderati:

<rules>
    <logger name="*" minlevel="Trace" writeTo="debugger" />

ora hai l'output della console proprio come Jetty nella finestra "Output" di VS e assicurati di essere in esecuzione in modalità Debug (F5).


0

Questo è fonte di confusione per tutti quando si tratta di IISExpress. Non c'è nulla per leggere i messaggi della console. Ad esempio, nelle app ASPCORE MVC si configura usando appsettings.json che non fa nulla se si utilizza IISExpress.

Per ora puoi semplicemente aggiungere loggerFactory.AddDebug (LogLevel.Debug); nella sezione Configura e ti mostrerà almeno i tuoi log nella finestra Output di debug.

Buone notizie CORE 2.0 tutto cambierà: https://github.com/aspnet/Announcements/issues/255



-3

In un'applicazione ASP.NET, penso che vada alla finestra Output o Console che è visibile durante il debug.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.