@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

デバッグファイルを上書きで作成する

投稿者投稿内容
あや☆
常連さん
会議室デビュー日: 2005/07/28
投稿数: 36
投稿日時: 2005-10-28 10:51
こんにちは。
いつもお世話になっております。
C#.NETでWEBアプリの開発をしています。

件名のとおり、デバッグファイルをファイル名が同じ場合は上書きで作成したいと思っています。
現在は、以下のようなソースを書いていて、どんどん追記されていきます。

------------------------------------------------------------------------------
//デバックファイル出力先
DefaultTraceListener dtl = (DefaultTraceListener)Debug.Listeners["Default"];
dtl.LogFileName = "debug.html";

Debug.WriteLine("処理開始");
Debug.WriteLine("処理終了");
------------------------------------------------------------------------------

デバックファイルを追記ではなく上書きにする方法をご存知の方がいましたら教えてください。
よろしくお願いします。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-10-28 11:26
開発環境用ですか、それとも運用用ですか。
Debugクラスがつかえるのですから開発環境用でしょうか。
運用のログなら慎重に検討する必要があるので、私が書いたことを鵜呑みに
しないでください。


ファイルを消して、書き込みすれば上書きになります。
それではだめですか?

今手元に実証環境がないので試せないのですが...
トレースリスナを自作するとか、TextWriterTraceListenerを使うとかいう
手も考えられます。





.NET Framework クラス ライブラリ
TextWriter クラス
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemiotextwriterclasstopic.asp

_________________
たつごろー
codeseek
こみゅぷらす
あや☆
常連さん
会議室デビュー日: 2005/07/28
投稿数: 36
投稿日時: 2005-10-28 17:13
たつごろーさん、返信ありがとうございました。

----------------------------------------------------------------
引用

開発環境用ですか、それとも運用用ですか。
Debugクラスがつかえるのですから開発環境用でしょうか。
------------------------------------------------------------------

ちょっと根本的な問題をお聞きしたいのですが、
運用時に、Debugモードでビルドしたものを使うと、問題あるのでしょうか?
デバックレベルを作って、テスト時はデバック文を全て出し、
運用時は処理のSTARTとEND、及びエラーメッセ-ジだけを出力するというようにしようと思っていました。
ちょっと調べた限りでは、モードで処理速度の違いはあるようですが。

あと、TextWriterでデバッグファイルを作成する方法も検討したのですが、
using (StreamWriter writer = File.CreateText(FILE_NAME))
{
writer.WriteLine( "処理開始") ;
writer.WriteLine( "処理終了") ;
}
という書き方でとりあえずファイルを作ることはできました。

しかし、アプリケーション全体で一つのファイルにログをはきたい場合はどうすればいいのか分かりません。
例えば以下のような場合、
------------------------------------------------------
public class AAA : System.Web.UI.Page {
private void aaa{
writer.WriteLine( "aaa処理開始") ;
}
}
public class BBB : System.Web.UI.Page {
pridate void bbb{
writer.WriteLine( "bbb処理開始") ;
}
}
----------------------------------------------------------
using (StreamWriter writer = File.CreateText(FILE_NAME)) をどのように指定したらいいのですか?

すいませんがご教授ください。
よろしくお願いします。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-10-28 17:35
引用:

運用時に、Debugモードでビルドしたものを使うと、問題あるのでしょうか?


あります。下のJittaさんの書き込みを読んで下さい。
モード切替ができるのに活用しないのはもったいないです。

引用:

デバックレベルを作って、テスト時はデバック文を全て出し、
運用時は処理のSTARTとEND、及びエラーメッセ-ジだけを出力するというようにしようと思っていました。


Debug時ではないときの障害を保存したいなら、Debugで出すよりTraceで出したほうがいいでしょう。

引用:

あと、TextWriterでデバッグファイルを作成する方法も検討したのですが、


トレースリスナを自作するか、TextWriterTraceListenerを使ったものに変えてはいかが、という意味で書きました。生TextWriterを使うのはお勧めではないです。

運用時のログにかかわる実装はいろいろ問題が出てきます。
まずは検索してみてください。いっぱい資料が出てくるはずです。




_________________
たつごろー http://www.codeseek.net
MS MVP - Visual Developer Visual Basic (2005/08 - 2006/07)

[ メッセージ編集済み 編集者: たつごろー 編集日時 2005-10-30 07:58 ]

[ メッセージ編集済み 編集者: たつごろー 編集日時 2005-10-31 10:01 ]
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-10-28 17:57
きっかけとして、市川さんの連載
Enterprise Library概説
拡張性と使いやすさを併せ持つログ出力機能を実装しよう
http://www.atmarkit.co.jp/fdotnet/entlib/entlib04/entlib04_01.html
は、とても参考になりますよ。

Enterprise Library概説
市川 龍太
http://www.atmarkit.co.jp/fdotnet/entlib/index/index.html

_________________
たつごろー
codeseek
こみゅぷらす
あや☆
常連さん
会議室デビュー日: 2005/07/28
投稿数: 36
投稿日時: 2005-10-28 19:20
たつごろーさん、いろいろとご親切にありがとうございました。
参考にさせていただきます。

--------------------------------------------------------------------------------
引用

Debug時ではないときの障害を保存したいなら、Debugで出すよりTraceで出したほうがいいでしょう。
--------------------------------------------------------------------------------

ちなみに、なぜDebugで出すよりTraceで出したほうがいいのですか?
よろしければ、理由を教えていただけないでしょうか?
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-10-28 21:57
引用:

なぜDebugで出すよりTraceで出したほうがいいのですか?


ビルドの構成マネージャでDebugとReleaseが切り替えられます。
Debugのときは、DebugとTraceが出力されます。
ReleaseのときはTraceが出力されます。
Traceも不要であれば出力をしないように動的に変更できます。
これを使い分ければ、デバッグに必要な情報の取得をコントロール
できることになります。

[HOWTO] Visual C# .NET でのトレースとデバッグの方法
http://support.microsoft.com/default.aspx?scid=kb;ja;815788
Trace クラスと Debug クラスは同じアプリケーション内で、個別または同時に使用できます。Debug ソリューション構成のプロジェクトでは、Trace クラスの出力と Debug クラスの出力は両方ともアクティブなため、すべての Listener オブジェクトに対して両方のクラスからの出力が生成されます。これに対して、Release ソリューション構成のプロジェクトでは、Trace クラスの出力のみ生成されます。Debug クラスのメソッドによる呼び出しはすべて無視されます。

_________________
たつごろー
codeseek
こみゅぷらす
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-10-28 23:02
引用:

たつごろーさんの書き込み (2005-10-28 17:35) より:
引用:

運用時に、Debugモードでビルドしたものを使うと、問題あるのでしょうか?


ありません。


ありますですよ!!
 ASP.NET では、実行時にコンパイルしましすが、その結果にデバッグ用のシンボルが含まれ、メモリ的にも肥大化するし、速度的にも遅くなります。

 また、 web.config の中にも設定が…あったと思う。どちらかのデバッグモードでは、リクエストがシングルスレッドで実行されます。

これは、例外メッセージを外に出さない、ってやつとは違うかったはず。


メインマシンが壊れて^H^H壊してしまったので、かなりあやふや。。。
___________________________________________________________________
□ written by Jitta on 2005/10/262005/10/28
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2004-Sept.2006
_________________

スキルアップ/キャリアアップ(JOB@IT)