In einer J2EE-Anwendung (wie einer, die in WebSphere ausgeführt wird) wird System.out.println()
mein Text bei Verwendung auf Standardausgabe übertragen, die von der WebSphere-Administratorkonsole einer Datei zugeordnet wird.
Wohin geht in einer ASP.NET-Anwendung (wie einer in IIS ausgeführten) die Ausgabe von Console.WriteLine()
? Der IIS-Prozess muss stdin, stdout und stderr haben. Aber ist stdout der Windows-Version von / dev / null zugeordnet oder fehlt mir hier ein Schlüsselkonzept?
Ich frage nicht, ob ich mich dort anmelden soll (ich verwende log4net), aber wohin geht die Ausgabe? Meine besten Informationen kamen aus dieser Diskussion, in der sie sagten, dass sie Console.SetOut()
das ändern können TextWriter
, aber sie beantworteten immer noch nicht die Frage, wie der Anfangswert der Konsole lautet oder wie sie in config / außerhalb des Laufzeitcodes festgelegt werden soll.
quelle
Antworten:
Wenn Sie sich die
Console
Klasse in .NET Reflector ansehen , werden Sie feststellen, dass, wenn einem Prozess keine Konsole zugeordnet istConsole.Out
undConsole.Error
vonStream.Null
(in a eingeschlossenTextWriter
) unterstützt wird, eine Dummy-ImplementierungStream
, die im Grunde alle Eingaben ignoriert, und gibt keine Ausgabe.Es ist also konzeptionell äquivalent zu
/dev/null
, aber die Implementierung ist rationaler: Es findet keine tatsächliche E / A mit dem Null-Gerät statt.Abgesehen vom Aufrufen
SetOut
gibt es auch keine Möglichkeit, die Standardeinstellung zu konfigurieren.quelle
Wenn Sie
System.Diagnostics.Debug.WriteLine(...)
anstelle von verwendenConsole.WriteLine()
, können Sie die Ergebnisse im Ausgabefenster von Visual Studio anzeigen.quelle
Ich habe diese Frage gefunden, indem ich versucht habe, die Protokollausgabe des DataContext in das Ausgabefenster zu ändern. Für alle anderen, die versuchen, dasselbe zu tun, habe ich Folgendes erstellt:
Und danach: dc.Log = new DebugTextWriter () und ich können 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
quelle
TextWriter
?dc.Log = s => Debug.WriteLine(s);
.Wenn Sie IIS Express verwenden und es über eine Eingabeaufforderung starten, wird das DOS- Fenster geöffnet und dort werden Anweisungen angezeigt
Console.Write
.Öffnen Sie beispielsweise ein Befehlsfenster und geben Sie Folgendes ein:
Dies setzt voraus, dass Sie ein Website-Verzeichnis unter C: \ Projects \ Website1 haben. Es startet IIS Express und stellt die Seiten in Ihrem Website-Verzeichnis bereit. Das Befehlsfenster bleibt geöffnet, und dort werden Ausgabeinformationen angezeigt. Angenommen, Sie hatten dort eine Datei, default.aspx, mit diesem Code:
Ordnen Sie Ihren Browser und die Befehlsfenster so an, dass Sie beide auf dem Bildschirm sehen können. Geben Sie nun in Ihren Browser ein :
http://localhost:1655/
. Du wirst Hallo sehen! auf der Webseite, aber im Befehlsfenster sehen Sie so etwas wieIch habe es einfach gemacht, indem ich den Code in einem Codeblock im Markup habe, aber alle Konsolenanweisungen in Ihrem Code-Behind oder irgendwo anders in Ihrem Code werden auch hier angezeigt.
quelle
System.Diagnostics.Debug.WriteLine(...);
Ruft es in das Direktfenster in Visual Studio 2008 ab.Gehen Sie zum Menü Debug -> Windows -> Sofort :
quelle
Output
neben demImmediate Window
Dankeschön angezeigt!Standardmäßig hört einfach keine Konsole zu. Im Debug-Modus ist eine Konsole angeschlossen, aber in einer Produktionsumgebung geht die Nachricht, wie Sie vermutet haben, einfach nirgendwo hin, weil nichts abgehört wird.
quelle
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 () zum Debuggen von Informationen verwenden, die in der Produktion ein- und ausgeschaltet werden können.
quelle
Das
TraceContext
Objekt in ASP.NET schreibt in die StandardausgabeDefaultTraceListener
des Hostprozesses . Anstatt mit , wenn Sie verwenden , wird der Ausgang auf die Standardausgabe des Prozesses gehen.Console.Write()
Trace.Write
Sie können das
System.Diagnostics.Process
Objekt verwenden, um den ASP.NET-Prozess für Ihre Site abzurufen und die Standardausgabe mithilfe desOutputDataRecieved
Ereignisses zu überwachen .quelle
Wenn Sie NLog in Ihrem ASP.net-Projekt verwendet haben, können Sie ein Debugger-Ziel hinzufügen :
und schreibt Protokolle für die gewünschten Ebenen in dieses Ziel:
Jetzt haben Sie eine Konsolenausgabe wie Jetty im Fenster "Ausgabe" von VS und stellen sicher, dass Sie im Debug-Modus (F5) ausgeführt werden.
quelle
Dies ist für alle verwirrend, wenn es um IISExpress geht. Es gibt nichts zum Lesen von Konsolennachrichten. So wird beispielsweise in den ASPCORE MVC-Apps die Verwendung von appsettings.json konfiguriert, was bei Verwendung von IISExpress nichts bewirkt.
Im Moment können Sie einfach loggerFactory.AddDebug (LogLevel.Debug) hinzufügen. in Ihrem Abschnitt Konfigurieren und es zeigt Ihnen zumindest Ihre Protokolle im Fenster Debug-Ausgabe.
Gute Nachrichten CORE 2.0, das wird sich ändern: https://github.com/aspnet/Announcements/issues/255
quelle
Mac, Im Debug-Modus gibt es eine Registerkarte für die Ausgabe.
quelle
In einer ASP.NET-Anwendung wird das Fenster "Ausgabe" oder "Konsole" angezeigt, das beim Debuggen angezeigt wird.
quelle