[seasar-dotnet:1047] Re: SqlLogRegistryについて

k.moriwaki [E-MAIL ADDRESS DELETED]
2008年 10月 22日 (水) 14:07:15 JST


久保さん
森脇です

自動生成後のソースにて期待通りSqlのログが取得出来ることを確認しました。
対応、ありがとうございました。


2008/10/18 13:47 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
> 森脇です。
>
>> はい、それぞれ独立した機能なので1、2、3全てOKです。
>> また、3の場合でも2回分のSQL文字列生成がは走るわけではありません。
> 素晴らしいです、これでログ関連の用件はすべて満たせそうです。
> 月曜の自動生成が楽しみになってきました。
>
> 細かいリクエストでしたが、迅速に対応していただきありがとうございました。
> また質問するかもしれませんが。よろしくお願いいたします。
>
>
> 2008/10/18 12:10 kubo <[E-MAIL ADDRESS DELETED]>:
>> 久保(jflute)です。
>>
>>>> さらに、limitSizeも指定できた方が良いと思ったので、
>>>> すいませんがちょっとやり方変えました。
>>> このやり方のほうがDBFluteっぽくて良いですね。
>>
>> ありがとうございます
>>
>>>> もっとシンプルな機能をDBFluteとして提供することにしました。
>>> おお、素晴らしいです。
>>> で、この機能について確認なのですが
>>> 1.SqlLogRegistryのみ使用
>>> 2.新機能のみ使用
>>> 3.両方を併用して使用
>>> と使い分ける事が可能と言うことで認識はあっていますでしょうか?
>>
>> はい、それぞれ独立した機能なので1、2、3全てOKです。
>> また、3の場合でも2回分のSQL文字列生成がは走るわけではありません。
>>
>> どうちらかというと:
>> リクエストで発行されたSQLを取得 → 新機能
>> 直近のSQL(だけ)を取得 → SqlLogRegistry
>> な感じです。
>>
>> PageクラスのInterceptorでSQLを集める場合は、
>> 新機能だけで事足りると思います。
>> ビジネスロジック内で「ついさっきのSQLを取得」
>> とかであればLatestSqlProvider(SqlLogRegistry)が向いてます。
>> (ただ、新機能でHandleしたSQLをどこかThreadLocalに積めば
>>  同じことはできるかと思います)
>>
>>
>> # 個人的には大抵の要件を新機能でまかなえると考えています。
>> # 基本的にスレッドローカルにSQLを(デフォルトで)じゃんじゃん
>> # 積んでいくのが自分はちょっと抵抗があるので。。。
>>
>> 2008/10/18 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>> 森脇です。
>>>
>>>> 無いので追加しました。ExtractDisplaySqlList()を追加して、
>>>> そもそもThreadLocal上のリスト全て取得できるようにしました。
>>> ありがとうございます。
>>>
>>>> さらに、limitSizeも指定できた方が良いと思ったので、
>>>> すいませんがちょっとやり方変えました。
>>> このやり方のほうがDBFluteっぽくて良いですね。
>>>
>>>> また、そもそも色々見直してみてSqlLogRegistry自体が
>>>> ちょっと使いづらい感があるので(内部的にも扱いづらい...)、
>>>> もっとシンプルな機能をDBFluteとして提供することにしました。
>>> おお、素晴らしいです。
>>> で、この機能について確認なのですが
>>> 1.SqlLogRegistryのみ使用
>>> 2.新機能のみ使用
>>> 3.両方を併用して使用
>>> と使い分ける事が可能と言うことで認識はあっていますでしょうか?
>>>
>>>
>>> 2008/10/18 1:25 kubo <[E-MAIL ADDRESS DELETED]>:
>>>> 久保(jflute)です。
>>>>
>>>>>> SQLの取得方法は、LatestSqlProviderをインジェクションして
>>>>>> GetDisplaySql()を呼びだしてSQL文字列を取得して下さい。
>>>>> このメソッドは最後のSQLしか取得出来ないのでしょうか?
>>>>
>>>> 無いので追加しました。ExtractDisplaySqlList()を追加して、
>>>> そもそもThreadLocal上のリスト全て取得できるようにしました。
>>>> (サイト上にアップしました)
>>>>
>>>> さらに、limitSizeも指定できた方が良いと思ったので、
>>>> すいませんがちょっとやり方変えました。
>>>>
>>>> x -- torque.isAvailableSqlLogRegistry = true
>>>>
>>>> o -- sqlLogRegistryDefinitionMap.dfprop
>>>> map:{
>>>>    ; valid = true
>>>>    ; limitSize = 6
>>>> }
>>>>
>>>>
>>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>> また、そもそも色々見直してみてSqlLogRegistry自体が
>>>> ちょっと使いづらい感があるので(内部的にも扱いづらい...)、
>>>> もっとシンプルな機能をDBFluteとして提供することにしました。
>>>>
>>>> 単純に実行したSQLをコールバックで拾えるようにしました。
>>>> アプリは似るなり焼くなりSQL文字列を扱うことができます。
>>>>
>>>> C#版Example(CallbackContextTest):
>>>> https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-nbasic-example/source/DfExampleTest/DBFlute/Allcommon/CallbackContextTest.cs
>>>>
>>>> Java版Example(CallbackContextTest):
>>>> https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example/src/test/java/com/example/dbflute/basic/dbflute/allcommon/CallbackContextTest.java
>>>>
>>>> 2008/10/17 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>> 久保さん
>>>>> 森脇です。
>>>>>
>>>>> 迅速な対応ありがとうございます。
>>>>> 確認したいのですがVSとソースは職場にしかないので
>>>>> 来週月曜以降に試してみます。
>>>>>
>>>>> で、軽くテンプレートファイルを見たのですが、
>>>>>
>>>>>> SQLの取得方法は、LatestSqlProviderをインジェクションして
>>>>>> GetDisplaySql()を呼びだしてSQL文字列を取得して下さい。
>>>>> このメソッドは最後のSQLしか取得出来ないのでしょうか?
>>>>>
>>>>> もしそうであれば、できれば直近何件までか取得できるようにならないでしょうか。
>>>>> (get(int)メソッドをコメントアウトしてソースを送った手前大変恐縮ですが…)
>>>>>
>>>>>
>>>>> 2008/10/17 20:17 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>>> 久保です。
>>>>>>
>>>>>>> 参考までにですが…
>>>>>>>
>>>>>>> 自分は例外処理を行うインターセプターで利用していました。
>>>>>>> 例外処理後に、スタックトレースと実行した直近5件のSQLをメールで
>>>>>>> 管理者に送信するといった感じです。
>>>>>>> また、操作履歴をDBに登録する際にも使用していました。
>>>>>> 情報提供ありがとうございます。
>>>>>> はい、これは正当なSqlLogRegistryを利用する理由に相当しますね。
>>>>>> 自分も操作履歴の要件があったプロジェクトで使いました。
>>>>>>
>>>>>>
>>>>>> http://dbflute.sandbox.seasar.org/download/dbflute/dbflute-0.8.2.zip
>>>>>> にて対応しました。
>>>>>> お手数ですが、お試し頂けないでしょうか?
>>>>>>
>>>>>> build-xxx.propertiesに「torque.isAvailableSqlLogRegistry = true」
>>>>>> と設定して自動生成することでSqlLogRegistryが有効になります。
>>>>>> (build-fullProperties.propertiesに記述例があります)
>>>>>> SQLの取得方法は、LatestSqlProviderをインジェクションして
>>>>>> GetDisplaySql()を呼びだしてSQL文字列を取得して下さい。
>>>>>> (上記の設定がされていない場合はnullが帰ります)
>>>>>>
>>>>>> 内部的には:
>>>>>> InternalSqlLogRegistryLocator
>>>>>> InternalSqlLogRegistry
>>>>>> InternalSqlLog
>>>>>> で実現されています。
>>>>>>
>>>>>> 2008/10/17 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>>>> 森脇です
>>>>>>>
>>>>>>>> とりあえずDBFluteでは個別に対応してしまおうかと思います。
>>>>>>> よろしくお願いします。
>>>>>>>
>>>>>>>> なので、目的が「例外発生時のログ」だけであればそんなに
>>>>>>>> この機能が必要になることはないはずです。
>>>>>>> 以下駄文です。
>>>>>>> 参考までにですが…
>>>>>>>
>>>>>>> 自分は例外処理を行うインターセプターで利用していました。
>>>>>>> 例外処理後に、スタックトレースと実行した直近5件のSQLをメールで
>>>>>>> 管理者に送信するといった感じです。
>>>>>>> また、操作履歴をDBに登録する際にも使用していました。
>>>>>>>
>>>>>>>
>>>>>>> 2008/10/17 17:43 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>>>>> 久保(jflute)です。
>>>>>>>>
>>>>>>>> おおお、ありがとうございます!素敵です。
>>>>>>>> 今こっちでもDBFluteで対応してしまおうかと
>>>>>>>> 思った次第でした。。。参考にさせて頂きます。
>>>>>>>> とりあえずDBFluteでは個別に対応してしまおうかと思います。
>>>>>>>> 古いバージョンのS2Dao.NETで動かなくなってしまうので、
>>>>>>>> DBFluteはDBFluteで対応した方が良いという判断です。
>>>>>>>> (S2Dao.NETに組み込むかどうかは他のコミッタの判断に任せます)
>>>>>>>>
>>>>>>>>> ・BasicHandler でログ出力をしていない
>>>>>>>>> ログを出力する必要があるのか?
>>>>>>>> ちょっと構造がJavaとは微妙に異なるので、
>>>>>>>> 厳密に対応しようとすると大変かもですね。
>>>>>>>> (把握するのが大変って意味で)
>>>>>>>>
>>>>>>>>> ・SqlLogRegistryImplのget(int)が未実装
>>>>>>>> まず使わないメソッドだと思うので大丈夫です。
>>>>>>>>
>>>>>>>>> ・Java版と同様にデフォルトで機能がONになっている
>>>>>>>>> パフォーマンス等の問題でデフォルトはOFFがよいか?
>>>>>>>> 個人的にはOFFが良いかと思います。
>>>>>>>> (もしSeasar側でONで組み込まれたらDBFluteで
>>>>>>>>  必死にOFFにします(^^)
>>>>>>>>
>>>>>>>>>> 要望がSeasar.NETの方でなかったからだと思います。
>>>>>>>>> なるほど、そうだったんですか。
>>>>>>>>> Java版では例外発生時のログに含めたりとかいろいろ役に立ったのですが…
>>>>>>>> ちなみに、最新のDBFluteではSQL実行時の例外には、
>>>>>>>> デバッグログで出力されるSQLと同じものをメッセージとして
>>>>>>>> 乗せています。例外発生してから文字列を生成するため、
>>>>>>>> パフォーマンスも劣化しません。
>>>>>>>> なので、目的が「例外発生時のログ」だけであればそんなに
>>>>>>>> この機能が必要になることはないはずです。
>>>>>>>> (無論、SQL文字列をDBに書き込むとかそういう時に必要ですが)
>>>>>>>>
>>>>>>>> 2008/10/17 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>> 久保さん
>>>>>>>>> 森脇です
>>>>>>>>>
>>>>>>>>>> 要望がSeasar.NETの方でなかったからだと思います。
>>>>>>>>> なるほど、そうだったんですか。
>>>>>>>>> Java版では例外発生時のログに含めたりとかいろいろ役に立ったのですが…
>>>>>>>>>
>>>>>>>>> で、Java版をC#版に書き換えてみました。
>>>>>>>>> (C#自体の理解がまだ浅いのでちょっと汚いかもしれません)
>>>>>>>>> ご迷惑かもしれませんが取り込んでいただけるとありがたく思います。
>>>>>>>>>
>>>>>>>>> また、移植するにあたりちょっと困った点が以下になります。
>>>>>>>>> ・BasicHandler でログ出力をしていない
>>>>>>>>> ログを出力する必要があるのか?
>>>>>>>>> ・SqlLogRegistryImplのget(int)が未実装
>>>>>>>>> Java版と同様にLinkedListで実装したが、ランダムアクセスをサポートしていなかった。
>>>>>>>>> おそらくListを使うよりは早いと思われたのでLinkedListのままにしてある。
>>>>>>>>> ・Java版と同様にデフォルトで機能がONになっている
>>>>>>>>> パフォーマンス等の問題でデフォルトはOFFがよいか?
>>>>>>>>>
>>>>>>>>> 以上、よろしくお願いいたします。
>>>>>>>>>
>>>>>>>>> 2008/10/17 15:10 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>> 久保(jflute)です。
>>>>>>>>>>
>>>>>>>>>> 森脇さん、こんにちは
>>>>>>>>>>
>>>>>>>>>> 無いです。残念ですが。。。
>>>>>>>>>> なぜ無いかというと、単に今までそういった
>>>>>>>>>> 要望がSeasar.NETの方でなかったからだと思います。
>>>>>>>>>>
>>>>>>>>>> 2008/10/17 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>> 森脇です
>>>>>>>>>>>
>>>>>>>>>>> 表題のクラスについてですが、Seasar2.NETに実装されていますでしょうか?
>>>>>>>>>>>
>>>>>>>>>>> Java版のDBFluteでは
>>>>>>>>>>> org.seasar.extension.jdbc.SqlLogRegistry
>>>>>>>>>>> がデフォルトで無効にされていたので、有効にしようと思ったのですが
>>>>>>>>>>> Seasar2.NETのソースを見たところ同様の機能をもったクラスが
>>>>>>>>>>> 無いみたいだったので質問させていただきました。
>>>>>>>>>>> (もしあったのであればすいません)
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>
>>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> seasar-dotnet mailing list
>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> seasar-dotnet mailing list
>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>
>>>>>> _______________________________________________
>>>>>> seasar-dotnet mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>
>>>>> _______________________________________________
>>>>> seasar-dotnet mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>
>>>> _______________________________________________
>>>> seasar-dotnet mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>
>>> _______________________________________________
>>> seasar-dotnet mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>


seasar-dotnet メーリングリストの案内