This project is read-only.

目次

概要

ロガーを使用すると、SQLの実行ログやエラーログをハンドリングできます。
ここでは、ロガーの作成方法と設定方法を説明します。

なお、SQLの実行ログやエラーログが不要な場合は、ロガーを作成したり設定したりする必要はありません。

ロガークラスの作成方法

ロガークラスはSoma.Data.Logging.ILoggerを実装しなければいけません。
例えば、SQLの実行前にフォーマットされたSQLをコンソールに出力するロガークラスは次のように記述できます。

internal class ConsoleLogger : ILogger
{
	#region ILogger Members
	public void LogBeforeExecution(LogContext logContext)
	{
		Console.WriteLine(logContext.FormattedSql);
	}

	public void LogAfterExecution(LogContext logContext)
	{
	}
	#endregion
}

ログコンテキスト

ILoggerに定義されたLogBeforeExecutionとLogAfterExecutionの2つのメソッドはSoma.Data.Logging.LogContextをパラメータに持ちます。LogContextには、ログ出力に役立つ情報が含まれています。
以下にLogContextの利用例を示します。

未加工SQLとフォーマット済みSQLを取得する

未加工のSQLとは、データプロバイダに渡されるバインド変数つきのSQLです。
一方、フォーマット済みのSQLとは、未加工のSQLに含まれたバインド変数をバインドされる値で置き換えたSQLです。
未加工SQLの例を以下に示します。

select * from Employe where EmployeeId = @p0
上記の未加工SQLに対応するフォーマット済みSQLの例を以下に示します。

select * from Employe where EmployeeId = 1
未加工のSQLはLogContext.RawSqlに格納され、フォーマット済みのSQLはLogContext.FormattedSqlに格納されています。

ログをデータベースに格納する

データベースにアクセスするにはLogContext.Command.Connectionで返されるConnectionを使用できます。

SQL発行時に発生した例外を記録する

LogAfterExecutionメソッドは、SQL発行時に例外が発生しても呼び出されます。LogContext.Exceptionの値がnullでない場合は、返される例外が発生したことを示します。

LogBeforeExecutionメソッドで生成した値をLogAfterExecutionメソッドに渡す

LogBeforeExecutionメソッドでLogContext.LogStateに任意の値を設定し、LogAfterExecutionメソッドでLogContext.LogStateから値を取得できます。

ロガーの設定

ロガーの設定方法は2種類あります。
  • プログラムコードによる設定
  • アプリケーション構成ファイルによる設定
どちらかを使用してください。

プログラムコードによる設定

環境によりロガーの実装を切り替える必要がない場合は、プログラムコードによる設定が簡単です。
プログラムの初期化処理でSoma.SomaSettingsクラスのLoggerプロパティにSoma.Data.Logging.ILoggerの実装クラスのインスタンスを設定してください。

SomaSettings.Logger = new ConsoleLogger();

アプリケーション構成ファイルによる設定

環境によりロガーの実装を切り替える必要がある場合は、アプリケーション構成ファイル(App.ConfigやWeb.Config)による設定が適切です。
アプリケーション構成ファイルのconfiguration要素の直下に以下の記述を追加してください。

    <configSections>
        <sectionGroup name="soma">
            <section name="logger" type="Soma.Data.Logging.LoggerSection, Soma" />
        </sectionGroup>
    </configSections>
また、以下の記述を追加してください。

    <soma>
        <logger type="Example.ConsoleLogger, Example" />
    </soma>

soma/logger要素のtype属性には、Soma.Data.Logging.ILoggerの実装クラスのアセンブリ修飾名を指定します。
ここでは「Example.ConsoleLogger, Example」と記述しています。

アプリケーション構成ファイル全体は次のような記述になります。

<?xml version="1.0" encoding="utf-8"?>

<configuration>
    <configSections>
        <sectionGroup name="soma">
            <section name="logger" type="Soma.Data.Logging.LoggerSection, Soma" />
        </sectionGroup>
    </configSections>

    <soma>
        <logger type="Example.ConsoleLogger, Example" />
    </soma>
</configuration>

設定を読み込むには、プログラムの初期化処理でSoma.SomaSettingsクラスのConfigureLoggerメソッドを呼び出します。

SomaSettings.ConfigureLogger();

Last edited Aug 3, 2010 at 2:06 AM by toshihiro, version 5

Comments

No comments yet.