はじめに

ロギング機能はKairyu本体にて実装されていますので、特に参照設定を変更する必要はありません。
現在のところロギングできる内容は以下のとおり。
関数名 備考
OnCreateCommand SQLコマンド生成イベントのフック
OnFinish マッピング完了イベントのフック

使い方

書き方が決まりきっているため、サンプルを元に説明します。
VB.NET
Kairyu.Log.OnCreateCommand =
    Sub(sender As Object, e As DbCommandEventArgs)
        Dim lv As String = String.Format("[{0}]", e.CommandInfoLevel.ToString.ToUpper)
        Debug.Print(String.Format("{0} {1}", lv, e.ToString))
    End Sub

Kairyu.Log.OnFinish =
    Sub(sender As Object, e As FinishEventArgs)
        Debug.Print(e.ToString)
    End Sub
イミディエイト ウインドウ
[INFO] [Prefectures] SELECT T0.PrefectureID AS T0_0, T0.PrefectureName AS T0_1, T0.PrefectureHiragana AS T0_2 FROM Prefectures T0

47rows 12ms (Create Definition=2ms, Create DbCommand=4ms, Open Query=1ms, Create Model=4ms)
  • 両関数ともデリゲートですので、コールバックしてほしいロジックを紐付すればOKです。
  • フックしたあとは Debug.Print するなり、log4net[logging.apache.org] を使うなりお好きにどうぞ。
  • ログの書式を変えたい場合は、引数(EventArgs)を参照してください。大概の情報は取れます。なお、SQLログの先頭にある[Prefectures]は、起点となったテーブル名を表しています。(SQL文を見ればわかりますが、FROM句は相当後ろのほうに出てくるため、目立つように先頭にも出すようにしています。)
  • OnFinish関数はフレームワーク開発者向けのログなので、普段はフックしなくてもいいかもしれません。

備考

ロギング処理はORM動作の必須条件ではありませんので、この処理を書かなくてもORMは利用できます。
が、SQL文のロギングは各種原因調査に非常に役立ちますので、ログを取ることをお勧めいたします。

また、当然ではありますが、ORMを使用しないSQLはログには残りません。
ストアドを実行する場合はご注意ください。

参考

主要なログ出力イメージ。(使用したDBMSはSQLCe3.5)

DDL

[WARN] SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE (TABLE_NAME = 'Prefectures')
[WARN] CREATE TABLE Prefectures (PrefectureID int NOT NULL, PrefectureName nvarchar(100) NOT NULL, PrefectureHiragana nvarchar(100) NOT NULL, CONSTRAINT PK_Prefectures PRIMARY KEY(PrefectureID))

SELECT文(検索条件あり)

[INFO] [Prefectures] SELECT T0.PrefectureID AS T0_0, T0.PrefectureName AS T0_1, T0.PrefectureHiragana AS T0_2 FROM Prefectures T0 WHERE T0.PrefectureHiragana LIKE @P0 /* P0=あ% */
3rows 6ms (Create Definition=3ms, Create DbCommand=1ms, Open Query=1ms, Create Model=0ms)

INSERT文

[INFO] [Prefectures] INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (@VP0, @VP1, @VP2) /* VP0=1, VP1=北海道, VP2=ほっかいどう */
…
[INFO] [Prefectures] INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (@VP0, @VP1, @VP2) /* VP0=47, VP1=沖縄県, VP2=おきなわけん */
47rows 131ms

INSERT文(オートナンバー)

[INFO] [AutoKeys] INSERT INTO AutoKeys (AutoKeyName) VALUES (@VP0) /* VP0=1です */
[DEBUG] SELECT @@IDENTITY
…
[INFO] [AutoKeys] INSERT INTO AutoKeys (AutoKeyName) VALUES (@VP0) /* VP0=5です */
[DEBUG] SELECT @@IDENTITY
5rows 13ms

UPDATE文

[INFO] [AutoKeys] UPDATE AutoKeys SET AutoKeyName = @VP0 WHERE AutoKeyID = @WP0 /* WP0=1, VP0=1です(更新) */
…
[INFO] [AutoKeys] UPDATE AutoKeys SET AutoKeyName = @VP0 WHERE AutoKeyID = @WP0 /* WP0=5, VP0=5です(更新) */
5rows 7ms

DELETE文

[INFO] [AutoKeys] DELETE FROM AutoKeys WHERE AutoKeyID = @WP0 /* WP0=1 */
…
[INFO] [AutoKeys] DELETE FROM AutoKeys WHERE AutoKeyID = @WP0 /* WP0=5 */
5rows 4ms

Last edited Mar 10, 2013 at 6:18 AM by mk3008, version 1

Comments

No comments yet.