2005年12月24日

Windwosアプリで Consoleに標準出力したい

やりたいことは記事タイトルの通りなのです。
具体的には、リアルタイムの実行ログをみる手段が欲しいのです。
「テキストファイルのログ以外で」
言語は .NETで。

コンパイル時のオプションに
・Windowsアプリ
・コンソールアプリ
・クラスライブラリ

と選べるわけですが、このうち コンソールアプリの場合は標準入出力が標準で使えるのは当たり前です。
Console.WriteLine("Hello World");
を実行すればコマンドプロンプトに
Hello World
が表示される訳です。

ところがそのソースコードをWindowsアプリとしてビルドしたのち実行すると例外を吐くことなく何事もなかったかのように Console.Writelineを無視してくれます。
Windowsアプリケーション 標準出力 vb.net - Google 検索
ググってみても有効な情報は得られず。


ためしに、コマンドプロンプトを開いて先ほどのWindowsアプリを実行してみましたが、一切の文字出力がありません。

一体どうしたらよいのだ????
この際 Windowsアプリからコンソールアプリの標準出力へ出せなくてもかまいません。
だって、コンソールログの流れている文字列をクリックしたり、右クリックしたりすると、プログラムの実行が止まってしまうでしょう?(Windows XPでは即座に文字選択ができないため、停止しない)
バッチ実行処理中にそのようなことが起きたら最悪である、一体どこの関数を実行中に止まっているのか考えるだけでも冷や汗ものだ。データベースのトランザクション処理中に止まっていたら、DBをロックし続ける恐怖のアプリになってしまう。

あくまでプログラム実行時のログをみたいときに簡単にみれる方法を提供したいのである。出来ればプログラムで完結して、後はWindowsの標準アプリを使うとログをみられる作りにしたい。
つまり通常の実行では、ログは出力していても捨てられている状態で、コマンドプロンプトに出したいと思った時にはログの参照が出来るような感じ。

でもこれは無理ぽい。


しょうがないので今までやっている方法は、
Trace.Writeメソッドを使ってログを吐きだし、
Sysinternals Freeware - DebugView
このツールを使って、ログをみたいときにはこいつで受け止めるようにしている。
この場合で不満なのは、ログをみたいときには専用のツールを入手する必要があることだ。DebugView 自体は非常に良く出来たツールでいつも愛用しているけれども、社内で使うとなると別問題。
サーバー端末では無料といえどもそういったツールの使用が禁じられていたりするし。

log4net - log4net Project辺りで解決できるのかなぁ。少々試してみることにしよう。


この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/224211
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

・おすすめ楽天ショップ1:trendyimpact楽天市場店
・おすすめサプリショップ:iHerb.com
・おすすめ楽天ショップ2:上海問屋
Powered by さくらのブログ