it-swarm.com.de

Wohin geht Console.WriteLine in ASP.NET?

Wenn ich in einer J2EE-Anwendung (wie in WebSphere ausgeführt) System.out.println() verwende, wird mein Text als Standard ausgegeben, der von der WebSphere-Administrationskonsole einer Datei zugeordnet wird.

Wohin geht die Ausgabe von Console.WriteLine() in einer ASP.NET-Anwendung (wie in IIS ausgeführt)? Der IIS - Prozess muss stdin, stdout und stderr haben. Ist aber stdout der Windows-Version von/dev/null zugeordnet, oder fehlt mir hier ein Schlüsselkonzept?

Ich bin frage nicht, ob ich mich dort anmelden soll (ich benutze log4net), aber wohin geht die Ausgabe? Meine besten Informationen kamen von dieser Diskussion , wo Console.SetOut() die TextWriter ändern kann, aber sie beantwortete immer noch nicht die Frage, was der Ausgangswert der Konsole ist oder wie sie in config/outside eingestellt wird des Laufzeitcodes.

273
Kevin Hakanson

Wenn Sie sich die Console-Klasse in .NET Reflector anschauen, werden Sie feststellen, dass Console.Out und Console.Error durch einen Stream.Null (in eine TextWriter eingeschlossene) Sicherung, die ein Dummy ist, gesichert werden, wenn einem Prozess keine Konsole zugeordnet ist Implementierung von Stream, die grundsätzlich alle Eingaben ignoriert und keine Ausgabe ausgibt.

Es ist also konzeptionell äquivalent zu /dev/null, aber die Implementierung ist strenger: Es gibt keine eigentliche E/A mit dem Nullgerät.

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

178
Ruben

Wenn Sie System.Diagnostics.Debug.WriteLine(...) anstelle von Console.WriteLine() verwenden, können Sie die Ergebnisse im Fenster Output von Visual Studio sehen.

661
Greg Bernhardt

Ich habe diese Frage gefunden, indem ich versuche, die Log-Ausgabe des DataContext in das Ausgabefenster zu ändern. Für alle anderen, die dasselbe tun wollen, habe ich Folgendes 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).

Sehen Sie sich dies für weitere Informationen an: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

24
Artur Carvalho

Wenn Sie IIS Express verwenden und über eine Eingabeaufforderung starten, wird das Fenster DOS geöffnet bleiben, und Sie sehen dort Console.Write-Anweisungen.

Öffnen Sie beispielsweise ein Befehlsfenster und geben Sie Folgendes ein:

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

Dies setzt voraus, dass Sie ein Website-Verzeichnis unter C:\Projects\Website1 haben. Es startet IIS Express und liefert die Seiten in Ihrem Website-Verzeichnis. Das Befehlsfenster bleibt geöffnet, und Sie sehen dort Ausgabeinformationen. Nehmen wir an, Sie hatten dort eine Datei namens default.aspx mit dem folgenden Code:

<%@ 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 Ihr Browser- und Befehlsfenster so an, dass Sie beide auf dem Bildschirm sehen können. Geben Sie nun Ihren Browser ein: http://localhost:1655/. Sie werden Hallo sehen! auf der Webseite, aber im Befehlsfenster sehen Sie so etwas

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 mit dem Code in einem Codeblock im Markup vereinfacht, aber auch alle Konsolenanweisungen in Ihrem code-behind oder irgendwo sonst in Ihrem Code werden hier ebenfalls angezeigt.

17
Chris

Standardmäßig wird einfach keine Konsole abgehört. Im Debug-Modus wird eine Konsole angeschlossen. In einer Produktionsumgebung ist es jedoch so, wie Sie vermuteten, dass die Nachricht einfach nicht weitergeleitet wird, da nichts zu hören ist.

6
Craig Tyler

System.Diagnostics.Debug.WriteLine(...); ruft es in das Direktfenster in Visual Studio 2008 auf.

Gehen Sie in das Menü Debug -> Windows -> Sofort :

Enter image description here

6
Nik

Wenn Sie sich nicht in einer strengen Konsolenanwendung befinden, würde ich sie nicht verwenden, da Sie sie nicht wirklich sehen können. Ich würde Trace.WriteLine () für Debugging-Informationen verwenden, die in der Produktion ein- und ausgeschaltet werden können.

4
Charles Graham

Das TraceContext-Objekt in ASP.NET schreibt in die DefaultTraceListener, die an den Host-Prozess ausgegeben wird. Standardausgabe . Anstatt Console.Write() zu verwenden, wird bei Ausgabe von Trace.Write die Standardausgabe des Prozesses verwendet.

Sie können das System.Diagnostics.Process-Objekt verwenden, um den ASP.NET-Prozess für Ihre Site abzurufen und die Standardausgabe mithilfe des OutputDataRecieved-Ereignisses zu überwachen.

3
Brian Griffin

wenn Sie NLog in Ihrem ASP.net-Projekt verwendet haben, können Sie ein Debugger-Ziel hinzufügen :

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

und schreibt Protokolle in dieses Ziel für die gewünschten Stufen:

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

sie haben jetzt wie Jetty eine Konsolenausgabe im "Output" -Fenster von VS und stellen sicher, dass Sie im Debug-Modus (F5) laufen.

0
mickey

Dies ist verwirrend für jeden, wenn es um IISExpress geht. Es gibt nichts, um Konsolenmeldungen zu lesen. In den ASPCORE MVC-Apps wird beispielsweise die Datei appsettings.json konfiguriert, was bei Verwendung von IISExpress nichts bewirkt.

Für jetzt können Sie einfach loggerFactory.AddDebug (LogLevel.Debug) hinzufügen. in Ihrem Abschnitt "Konfigurieren", und es werden mindestens Ihre Protokolle im Fenster "Debug-Ausgabe" angezeigt.

Gute Nachricht CORE 2.0 dies wird sich ändern: https://github.com/aspnet/Announcements/issues/255

0
Chris Go