# 共通ドキュメント

## ログ出力

### 概要

- 設定
- ログ出力オブジェクトの取得
- ログ出力
- 新しいログ出力の実装

### 設定

##### 設定要素

addタグにより個別の接続に対する設定を記述する。

name | 設定要素名。重複は許されない。"default"の名前を持つ設定要素が必ず1つ必要。
writerClass | 実際に使用するCFW.Log.LogWriterの実装クラス名を記述する。
parameter | LogWriterの初期化に必要なパラメータを指定。セミコロン";"区切りで複数指定可能
logLevel | ログ出力レベル、ALLの場合全てのログを出力。設定レベルより小さいレベルのログ出力は捨てられる。 現在の設定値(仕様変更対応中、フラグの組み合わせになる予定) NONE FATAL ERROR WARN INFO DEBUG ALL

##### 設定例

    <log>
    <-- DefaultLogWriterを使う -->
    <add name="default"
    	writerClass="CFW.Log.DefaultLogWriter,CFW"
    	parameter="default"
    	logLevel="ALL"/>
    <-- UserLogWriterを使う。baseDirに出力先ディレクトリ、baseNameにログファイルの基本名を指定 -->
    <add name="userLog"
    	writerClass="CFW.Log.UserLogWriter,CFW"
    	parameter="baseDir=c:\temp\log;baseName=test"
    	logLevel="ALL"/>
    <-- webservice専用にLogServiceReferenceを使用する場合 urlにLogService.asmxの場所を指定する。
    ここではERROR,FATALのみ出力 -->
    <add name="logService"
    	writerClass="CFW.Log.LogServiceReference.LogServiceReference,CFW.Log.LogServiceReference"
    	parameter="url=http://localhost:4503/LogService/LogService.asmx"
    	logLevel="ERROR"/>
    </log>

### ログ出力オブジェクトの取得

CFW.Log.LogFactoryを使用してCFW.Log.Loggerオブジェクトを取得。

指定するのは設定要素名称、クラス名。

    ///
    /// ログ出力の準備 定義しているクラス名を基にする。
    ///
    protected static CFW.Log.Logger log = CFW.Log.LoggerFactory.GetLogger(
        "default",
        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name
        );

### ログ出力

Loggerクラスの出力メソッドを使用して出力。

出力レベルはメソッドを使い分ける。(Info,Debug,Warn,Error,Fatal)

現在実行中のメソッド名を必ず指定する。

    //情報
    logger.Info(System.Reflection.MethodBase.GetCurrentMethod().Name, "test");

    //警告
    logger.Warn(System.Reflection.MethodBase.GetCurrentMethod().Name, "test");

    //エラー
    logger.Error(System.Reflection.MethodBase.GetCurrentMethod().Name, "test");

    //デバッグ
    logger.Debug(System.Reflection.MethodBase.GetCurrentMethod().Name, "test");

    //致命的なエラー。通常はこの後の処理は行わず、アプリケーションを終了する。
    logger.Fatal(System.Reflection.MethodBase.GetCurrentMethod().Name, "test");

実際の出力先は要件による。

### 実装済みのLogWriter

現在実装済みのLogWriterは以下のとおり

CFW.Log.DefaultLogWriter | System.Diagnostics.Traceに出力するLogWriter。TraceリスナーにCFW.Log.LogTraceListenerを指定することでタイムスタンプ付きログが採取できる。(Traceの詳細はMSDN等参照)
CFW.Log.UserLogWriter | ログファイルをユーザーID別に分けるためのLogWriter。CFW.Auth.AuthProviderからログイン済みのユーザーを取得してディレクトリ名の元にする。保存場所はparameterに指定したbaseDir以下の日付(年)\日付(年月)\日付(年月日)\(ユーザーID)\ ログイン処理を通過していない(CFW.Auth.AuthProvider#Authenticateを実行していない)場合は"anonymous"をユーザーIDの代わりにする。
CFW.Log.LogServiceReference.LogServiceReference | LogServiceを実行しているサーバーにログを出力する。LogService.asmxがウェブサーバーに必要。parameterにLogServiceを実行しているサーバーのurlを記述する。

### 新しいログ出力の実装

CFW.Log.LogWriterを継承し必要なメソッドを追加、overrideする。