347

J2EE アプリケーション (WebSphere で実行されているアプリケーションなど) で を使用するSystem.out.println()と、テキストは標準出力に送られ、WebSphere 管理コンソールによってファイルにマップされます。

ASP.NET アプリケーション (IIS で実行されているアプリケーションなど) では、出力はどこにConsole.WriteLine()行くのでしょうか? IIS プロセスには、stdin、stdout、および stderr が必要です。stdout は Windows バージョンの /dev/null にマップされていますか、それともここで重要な概念が欠けていますか?

そこにログを記録する必要があるかどうかは尋ねていません(私は log4net を使用しています) が、出力はどこに行くのでしょうか? 私の最良の情報は、を変更できると彼らが言うこのディスカッションから来ましたが、コンソールの初期値が何であるか、またはランタイムコードの構成/外部でそれを設定する方法についての質問にはまだ答えていません。Console.SetOut()TextWriter

4

14 に答える 14

210

.NET ReflectorConsoleのクラスを見ると、プロセスにコンソールが関連付けられておらず、 (の中にラップされた)によってサポートされていることがわかります。これは、基本的にすべての入力を無視するダミーの実装です。出力はありません。Console.OutConsole.ErrorStream.NullTextWriterStream

したがって、概念的にはと同等です/dev/nullが、実装はより合理化されています。つまり、nullデバイスで実際のI/Oが発生することはありません。

また、を呼び出す以外SetOutに、デフォルトを構成する方法はありません。

更新2020-11-02:この回答は2020年もまだ投票を集めているため、ASP.NET Coreでは通常、コンソールが接続されていることに注意してください。および設定を使用して、すべてのstdoutおよびstderr出力をログファイルにリダイレクトするようにASP.NETCoreIISモジュールを構成できます。stdoutLogEnabledstdoutLogFile

<system.webServer>
  <aspNetCore processPath="dotnet"
              arguments=".\MyApp.dll"
              hostingModel="inprocess"
              stdoutLogEnabled="true"
              stdoutLogFile=".\logs\stdout" />
<system.webServer>
于 2009-09-16T10:05:01.097 に答える
29

DataContext のログ出力を出力ウィンドウに変更しようとして、この質問を見つけました。だから、同じことをしようとしている他の人にとって、私がやったことはこれを作成することでした:

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

その後: dc.Log = new DebugTextWriter() を実行すると、出力ウィンドウにすべてのクエリが表示されます (dc は DataContext です)。

詳細については、これをご覧ください: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

于 2010-10-09T15:32:41.000 に答える
6

デフォルトでは、リッスンするコンソールはありません。デバッグモードで実行するとコンソールが接続されますが、実稼働環境では、ご想像のとおり、何もリッスンしていないため、メッセージはどこにも行きません。

于 2008-09-26T14:32:23.643 に答える
5

厳密なコンソールアプリケーションを使用していない限り、実際には表示されないため、使用しません。本番環境でオンとオフを切り替えることができるデバッグタイプの情報には、Trace.WriteLine()を使用します。

于 2008-09-26T04:10:10.857 に答える
3

TraceContextASP.NETのオブジェクトは、DefaultTraceListenerどの出力をホスト プロセスの標準出力に書き込みます。を使用するのではなく、 をConsole.Write()使用するTrace.Writeと、出力はプロセスの標準出力に送られます。

オブジェクトを使用して、サイトの ASP.NET プロセスを取得し、イベントSystem.Diagnostics.Processを使用して標準出力を監視できます。OutputDataRecieved

于 2012-03-02T22:09:15.743 に答える
-3

ASP.NET アプリケーションでは、デバッグ中に表示される出力ウィンドウまたはコンソール ウィンドウに移動すると思います。

于 2008-09-26T03:57:38.437 に答える