389 Stimmen

Wohin gehört Console.WriteLine in ASP.NET?

Wenn ich in einer J2EE-Anwendung (z. B. einer, die in WebSphere läuft) System.out.println() Mein Text wird an den Standardausgang gesendet, der von der WebSphere-Administrationskonsole einer Datei zugeordnet wird.

Wo wird in einer ASP.NET-Anwendung (z. B. einer, die in IIS läuft) die Ausgabe von Console.WriteLine() gehen? Der IIS-Prozess muss über stdin, stdout und stderr verfügen; aber ist stdout der Windows-Version von /dev/null zugeordnet, oder übersehe ich hier ein Schlüsselkonzept?

Ich bin nicht fragen ob ich dort protokollieren soll (ich verwende log4net), aber wohin geht die Ausgabe? Meine besten Informationen stammen von dieser Seite Diskussion wo sie sagen Console.SetOut() können die TextWriter aber es hat immer noch nicht die Frage beantwortet, was der anfängliche Wert der Konsole ist, oder wie man ihn in der Konfiguration/außerhalb des Laufzeitcodes einstellt.

844voto

Greg Bernhardt Punkte 9067

Wenn Sie System.Diagnostics.Debug.WriteLine(...) anstelle von Console.WriteLine() ein, dann können Sie die Ergebnisse in der Ausgabe Fenster von Visual Studio.

226voto

Ruben Punkte 14679

Wenn Sie sich die Console Klasse in .NET-Reflektor Wenn ein Prozess keine zugehörige Konsole hat, werden Sie feststellen, dass, Console.Out y Console.Error werden unterstützt von Stream.Null (eingewickelt in eine TextWriter ), die eine Dummy-Implementierung von Stream die im Grunde alle Eingaben ignoriert und keine Ausgabe liefert.

Es ist also begrifflich äquivalent zu /dev/null Die Implementierung ist jedoch schlanker: Es findet keine tatsächliche E/A mit dem Null-Gerät statt.

Neben dem Aufruf von SetOut gibt es keine Möglichkeit, den Standard zu konfigurieren.

Aktualisierung 2020-11-02 : Da diese Antwort im Jahr 2020 noch Stimmen sammelt, sollte man vielleicht anmerken, dass es unter ASP.NET Core normalerweise ist eine angeschlossene Konsole. Sie können die ASP.NET Core IIS-Modul um alle stdout- und stderr-Ausgaben in eine Protokolldatei umzuleiten, und zwar über die stdoutLogEnabled y stdoutLogFile Einstellungen:

<system.webServer>
  <aspNetCore processPath="dotnet"
              arguments=".\MyApp.dll"
              hostingModel="inprocess"
              stdoutLogEnabled="true"
              stdoutLogFile=".\logs\stdout" />
<system.webServer>

30voto

Artur Carvalho Punkte 6343

Ich bin auf diese Frage gestoßen, als ich versucht habe, die Log-Ausgabe des DataContextes in das Ausgabefenster zu ändern. Für alle anderen, die das Gleiche versuchen, habe ich Folgendes getan: Ich habe dies erstellt:

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

Und danach: dc.Log = new DebugTextWriter() und ich kann alle Abfragen im Ausgabefenster sehen (dc ist der DataContext).

Weitere Informationen finden Sie hier: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

19voto

Chris Punkte 181

Wenn Sie IIS Express verwenden und es über eine Eingabeaufforderung starten, wird es die DOS öffnen, und Sie werden sehen Console.Write Aussagen dort.

Öffnen Sie also zum Beispiel ein Befehlsfenster und geben Sie ein:

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

Dies setzt voraus, dass Sie ein Website-Verzeichnis haben unter C:\Projects\Website1. Er startet IIS Express und stellt die Seiten in Ihrem Website-Verzeichnis bereit. Das Befehlsfenster bleibt geöffnet, und Sie sehen dort die Ausgabeinformationen. Nehmen wir an, Sie hätten dort eine Datei, default.aspx, mit folgendem Code darin:

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

Ordnen Sie Ihren Browser und das Befehlsfenster so an, dass Sie beide auf dem Bildschirm sehen können. Geben Sie nun in Ihren Browser ein: http://localhost:1655/ . Auf der Webseite sehen Sie Hello!, aber im Befehlsfenster sehen Sie etwas wie

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

Ich habe es mir einfach gemacht, indem ich den Code in einem Codeblock im Markup habe, aber alle Konsolenanweisungen in Ihrer Code-Behind oder irgendwo anders in Ihrem Code wird auch hier angezeigt.

14voto

Nik Punkte 422

System.Diagnostics.Debug.WriteLine(...); bringt es in die Sofortiges Fenster in Visual Studio 2008.

Zum Menü gehen Debuggen -> Windows -> Unmittelbar :

Enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X