Gdy używam aplikacji J2EE (takiej jak ta uruchomiona w WebSphere), System.out.println()
mój tekst przechodzi do standardowej wersji, która jest odwzorowywana na plik przez konsolę administracyjną WebSphere.
W aplikacji ASP.NET (takiej jak ta uruchomiona w IIS), gdzie idzie wyjście Console.WriteLine()
? Proces IIS musi mieć stdin, stdout i stderr; ale czy stdout jest mapowany na wersję / dev / null dla systemu Windows, czy brakuje mi tutaj kluczowej koncepcji?
Nie pytam, czy powinienem się tam zalogować (używam log4net), ale gdzie idzie wyjście? Moje najlepsze informacje pochodzą z tej dyskusji, w której mówią, że Console.SetOut()
można to zmienić TextWriter
, ale wciąż nie odpowiadało na pytanie, jaka jest początkowa wartość konsoli lub jak ustawić ją w config / poza kodem środowiska wykonawczego.
źródło
Odpowiedzi:
Jeśli spojrzysz na
Console
klasę w .NET Reflector , przekonasz się, że jeśli proces nie ma powiązanej konsoliConsole.Out
iConsole.Error
jest wspierany przezStream.Null
(zawinięty w aTextWriter
), co jest pozorną implementacjąStream
która w zasadzie ignoruje wszystkie dane wejściowe, i nie daje wyniku.Jest to koncepcyjnie równoważne z
/dev/null
, ale implementacja jest bardziej usprawniona: nie ma rzeczywistych operacji we / wy z urządzeniem zerowym.Poza dzwonieniem
SetOut
nie ma też możliwości skonfigurowania ustawień domyślnych.źródło
Jeśli użyjesz
System.Diagnostics.Debug.WriteLine(...)
zamiastConsole.WriteLine()
, możesz zobaczyć wyniki w oknie Output Visual Studio.źródło
Znalazłem to pytanie, próbując zmienić dane wyjściowe dziennika DataContext na okno danych wyjściowych. Więc dla każdego, kto próbuje zrobić to samo, stworzyłem to:
Po tym: dc.Log = new DebugTextWriter () i widzę wszystkie zapytania w oknie wyjściowym (dc to DataContext).
Zajrzyj na to, aby uzyskać więcej informacji: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers
źródło
TextWriter
?dc.Log = s => Debug.WriteLine(s);
.Jeśli używasz IIS Express i uruchamiasz go za pomocą wiersza polecenia, okno DOS pozostanie otwarte, a zobaczysz
Console.Write
tam instrukcje.Na przykład otwórz okno poleceń i wpisz:
Zakłada się, że masz katalog witryny w C: \ Projekty \ Witryna1. Uruchomi IIS Express i będzie obsługiwał strony w katalogu witryny. Zostawi otwarte okna poleceń i zobaczysz tam informacje wyjściowe. Załóżmy, że masz tam plik default.aspx z tym kodem:
Rozmieść okna przeglądarki i poleceń, aby były widoczne na ekranie. Teraz wpisz w przeglądarce:
http://localhost:1655/
. Zobaczysz Cześć! na stronie, ale w oknie poleceń zobaczysz coś podobnegoUprościłem to, umieszczając kod w bloku kodu w znacznikach, ale tutaj pojawią się również wszelkie instrukcje konsoli w twoim kodzie lub w dowolnym innym miejscu kodu.
źródło
System.Diagnostics.Debug.WriteLine(...);
przenosi go do okna natychmiastowego w Visual Studio 2008.Przejdź do menu Debugowanie -> Windows -> Natychmiastowe :
źródło
Output
tuż pozaImmediate Window
podziękowaniami!Po prostu domyślnie nie ma nasłuchiwania przez konsolę. W trybie debugowania jest podłączona konsola, ale w środowisku produkcyjnym jest to, jak podejrzewasz, wiadomość po prostu nigdzie nie idzie, ponieważ nic nie nasłuchuje.
źródło
Jeśli nie używasz ścisłej aplikacji konsolowej, nie użyłbym jej, ponieważ tak naprawdę jej nie widzisz. Używałbym Trace.WriteLine () do informacji typu debugowania, które można włączać i wyłączać podczas produkcji.
źródło
TraceContext
Obiekt w ASP.NET zapisuje naDefaultTraceListener
który wysyła się do procesu gospodarza standardowej produkcji . Jeśli nie używaszConsole.Write()
, jeśli użyjeszTrace.Write
, dane wyjściowe przejdą na standardowe wyjście procesu.Możesz użyć tego
System.Diagnostics.Process
obiektu, aby uzyskać proces ASP.NET dla swojej witryny i monitorować standardowe dane wyjściowe za pomocąOutputDataRecieved
zdarzenia.źródło
jeśli zdarzyło Ci się użyć NLog w projekcie ASP.net, możesz dodać cel debugera :
i zapisuje dzienniki w tym celu dla pożądanych poziomów:
teraz masz wyjście konsoli jak Jetty w oknie „Wyjście” VS i upewnij się, że pracujesz w trybie debugowania (F5).
źródło
Jest to mylące dla wszystkich, jeśli chodzi o IISExpress. Nie ma nic do czytania komunikatów konsoli. Na przykład w aplikacjach ASPCORE MVC konfiguruje się za pomocą appsettings.json, co nie robi nic, jeśli używasz IISExpress.
Na razie możesz po prostu dodać loggerFactory.AddDebug (LogLevel.Debug); w sekcji Konfiguruj, a przynajmniej pokażą Ci twoje dzienniki w oknie Wyjście debugowania.
Dobra wiadomość CORE 2.0 to wszystko się zmieni: https://github.com/aspnet/Announcements/issues/255
źródło
Mac, w trybie debugowania znajduje się zakładka Wyjście.
źródło
W aplikacji ASP.NET myślę, że idzie do okna Output lub Console, które jest widoczne podczas debugowania.
źródło