1. ホーム
  2. asp.net

[解決済み] ASP.NETでConsole.WriteLineはどこに行くのですか?

2022-03-16 15:43:34

質問

J2EEアプリケーション(WebSphereで動作しているようなもの)で System.out.println() テキストは標準出力に送られ、WebSphere 管理コンソールによってファイルにマップされます。

ASP.NETアプリケーション(IISで動作しているものなど)では Console.WriteLine() となります。 IISプロセスはstdin、stdout、stderrを持っているはずですが、stdoutはWindows版の/dev/nullにマッピングされているのでしょうか、それともここで重要な概念を見逃しているのでしょうか?

私は 問わない にログを残すべきかどうか(私はlog4netを使用しています)、しかし、出力はどこに行くのでしょうか? 私の最も良い情報は、以下から得られました。 ディスカッション というところで Console.SetOut() を変更することができます。 TextWriter しかし、Consoleの初期値が何なのか、また、ランタイムコード以外のコンフィグでどのように設定するのか、という質問にはまだ答えられませんでした。

解決方法は?

を見ると Console のクラスは .NET リフレクター を使用すると、プロセスが関連するコンソールを持たない場合、それがわかります。 Console.OutConsole.Error は裏打ちされています。 Stream.Null (の中に包まれている)。 TextWriter のダミー実装である)。 Stream これは基本的にすべての入力を無視し、何の出力も与えません。

と概念的に等価であるわけです。 /dev/null しかし、実装はより合理化されており、ヌル・デバイスとの実際の入出力は行われません。

また SetOut デフォルトを設定する方法はありません。

更新日:2020-11-02 : この回答は2020年にまだ票を集めているため、ASP.NET Coreでは、通常 コンソールが付属しています。を設定することができます。 ASP.NET Core IISモジュール を使用して、すべての標準出力と標準エラー出力をログファイルにリダイレクトします。 stdoutLogEnabledstdoutLogFile の設定を変更することができます。

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