J2EEアプリケーション(WebSphereで実行されているアプリケーションなど)では、System.out.println()
を使用すると、テキストが標準出力に出力されます。これは、WebSphere管理コンソールによってファイルにマップされます。
ASP.NETアプリケーション(IISで実行されているアプリケーションなど)では、Console.WriteLine()
の出力はどこに移動しますか? IISプロセスには、標準入力、標準出力、および標準エラー出力が必要です。しかし、標準出力はWindows版の/ dev/nullにマッピングされているのでしょうか。
私は私は私はそこにログを記録する必要があるかどうかを尋ねない(私はlog4netを使用します)が、出力はどこに行くのですか? Console.SetOut()
はTextWriter
を変えることができると言っている ディスカッション から私の最も良い情報が得られました、しかしそれはそれでもコンソールの初期値が何か、またはどのようにするかに関する質問に答えませんでしたランタイムコードのconfig/outsideに設定してください。
。NET Reflector でConsole
クラスを見ると、プロセスに関連付けられたコンソールがない場合、Console.Out
とConsole.Error
はStream.Null
(TextWriter
で囲まれています)に裏打ちされています。 Stream
のダミー実装で、基本的にすべての入力を無視し、出力はしません。
したがって、概念的には/dev/null
と同等ですが、実装はより合理化されています。ヌルデバイスでは実際のI/Oは行われません。
また、SetOut
を呼び出す以外に、デフォルトを設定する方法はありません。
System.Diagnostics.Debug.WriteLine(...)
の代わりにConsole.WriteLine()
を使用すると、Visual StudioのOutputウィンドウに結果が表示されます。
私はこの質問をDataContextのLog出力を出力ウィンドウに変更しようとすることによって見つけました。だから同じことをやろうとしている誰かに、私がしたのはこれを作成することでした:
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-メモリライターまたはマルチライター
IIS Expressを使用してコマンドプロンプトで起動すると、 DOS ウィンドウは開いたままになり、そこにConsole.Write
ステートメントが表示されます。
たとえば、コマンドウィンドウを開いて次のように入力します。
"C:\Program Files (x86)\IIS Express\iisexpress" /path:C:\Projects\Website1 /port:1655
これは、C:\ Projects\Website1にWebサイトディレクトリがあると仮定しています。 IIS Expressが起動し、Webサイトのディレクトリにあるページが表示されます。コマンドウィンドウは開いたままになり、そこに出力情報が表示されます。このコードが入ったファイルdefault.aspxがあるとしましょう。
<%@ 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>
ブラウザとコマンドウィンドウの両方を画面に表示できるように配置します。ブラウザにhttp://localhost:1655/
と入力してください。こんにちは! Webページでは、しかしコマンドウィンドウでは、のようなものが表示されます
Request started: "GET" http://localhost:1655/
0
1
2
3
4
5
Request ended: http://localhost:1655/default.aspx with HTTP status 200.0
マークアップのコードブロックにコードを入れることでコードを単純にしましたが、 分離コード またはコード内の他の場所にあるコンソールステートメントもここに表示されます。
デフォルトでは、コンソールは待機しません。デバッグモードで実行するとコンソールが接続されますが、本番環境では疑わしいことですが、メッセージは何も聞こえないのでどこにも行きません。
System.Diagnostics.Debug.WriteLine(...);
は、Visual Studio 2008のイミディエイトウィンドウに入れます。
メニューに移動しますデバッグ - > Windows - > 即時:
厳密なコンソールアプリケーションを使用していない限り、実際には表示されないため、使用しません。実運用でオン/オフできるデバッグタイプの情報にはTrace.WriteLine()を使用します。
ASP.NETのTraceContext
オブジェクトは、ホストプロセスに出力するDefaultTraceListener
に書き込みます 標準出力 。 Trace.Write
を使用する場合、Console.Write()
を使用するのではなく、出力はプロセスの標準出力に行きます。
System.Diagnostics.Process
オブジェクトを使用して、サイトのASP.NETプロセスを取得し、OutputDataRecieved
イベントを使用して標準出力を監視できます。
たまたまASP.netプロジェクトでNLogを使用している場合は、 Debugger target を追加できます。
<targets>
<target name="debugger" xsi:type="Debugger"
layout="${date:format=HH\:mm\:ss}|${pad:padding=5:inner=${level:uppercase=true}}|${message} "/>
そして、あなたが望むレベルのログをこのターゲットに書き込みます。
<rules>
<logger name="*" minlevel="Trace" writeTo="debugger" />
これで、VSの[出力]ウィンドウにJettyとまったく同じコンソール出力が表示されます。デバッグモード(F5)で実行していることを確認してください。
IISExpressになると、これは誰にとっても混乱を招きます。コンソールメッセージを読むことは何もありません。そのため、例えばASPCORE MVCアプリケーションでは、appsettings.jsonを使用して構成しますが、IISExpressを使用している場合は何もしません。
現時点では、loggerFactory.AddDebug(LogLevel.Debug)を追加するだけです。あなたのConfigureセクションで、少なくともDebug Outputウィンドウにあなたのログを表示するでしょう。
良いニュースCORE 2.0これはすべて変化するでしょう: https://github.com/aspnet/Announcements/issues/255