- ベストアンサー
C# コンソールアプリでのログ出力
設定ファイルからログの出力先を読み、そこにその(設定ファイルを読んでいる)アプリケーションのログを出力させたいのですが、以下の問題点があります。 1.複数のクラスがあるため、普通にログ出力用のクラスを作ると、各クラスでインスタンスを作成せねばならない。 2.上記の場合、出力先は設定ファイルによって後から与えられるので、引数などによってファイルパスをもらわなければならない。 3.ログファイル名は「yyyyMMddHHmmss.log」となっているため検索が困難であるから、(1.の方法だと)ファイル名も渡してやる必要がある。 4.ERRORやFATALのみならアプリが終了してもかまわないのでthrowを使ってcatchでログを一括、ということもできるが、TRACEやDEBUGも出力させる必要がある。 Console.Writeのような感じで扱えるのが理想です。 何かよい方法はないものでしょうか? 普通にログ用のクラスを宣言して、他のクラスでログを出力したいなら、ログ出力クラスのインスタンスをコンストラクタに与える引数とするしかないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
staticにすればいいんじゃないですか? static class Logger { static public void Write(string s) { ... } } とかして、どっかで初期化(ファイル名の設定など)しとけば、後はいつでも Logger.Write("hoge") で。
その他の回答 (1)
- yotchan2
- ベストアンサー率61% (8/13)
#1の方に補足。 /// <summary> /// テキストログパス /// </summary> public static string LOG_FILE_PATH = string.Empty; を、ログ書くクラスに追加してやり、設定ファイルを読み込んだ時点で、パスを与えてやればいいかと思います。 また、1~3はログ書き出しに関することですが、4に関してはプログラム設計の問題ですよね?この辺はちゃんと切り分けておいた方がいいと思います。 また余談ですが、ログ書き出しクラスを生成する場合、ファイルIOでエラーは吐く場合もあるので、catchしたらリトライして書き出す処理を付けておくと、あとでちょっとだけ楽になります。
補足
有難うございます。 イメージとしては static ログ出力クラス{ public static string LOG_FILE_PATH = string.Empty; (ログ出力のためのメソッドなど) } 設定ファイルを読むクラス{ 設定を読むメソッド{ 設定を読む; ログ出力クラス.LOG_FILE_PATH; } } という感じでしょうか。
お礼
有難うございます。 おかげさまで方向性が見えてきました。 この方法で行きたいと思います。