Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

global_filters.yml をホスト拡張したい #89

Open
kazoo712 opened this issue Aug 11, 2013 · 5 comments
Open

global_filters.yml をホスト拡張したい #89

kazoo712 opened this issue Aug 11, 2013 · 5 comments

Comments

@kazoo712
Copy link

開発環境では、SQLのロギングを行うために Delta_SQLLoggingFilter を利用したいですが、プロダクション環境ではロギングをしたくないです。
この他にも、環境や用途によってSQLのロギングをしたかったりしたくなかったりするので、global_filters.yml をホスト拡張できるようにして頂けないでしょうか?
(※ 可能であれば、config/*.yml は基本的に全てホスト拡張できるようにして頂けないでしょうか。)

以上、よろしくお願いします。

@kazoo712 kazoo712 reopened this Aug 15, 2013
@naomichi-y
Copy link
Owner

以前そのような仕様でしたが、実装するとなるとリクエスト毎に以下のファイルを参照する必要があります。

  • config/global_filters.yml
  • config/global_filters_{hostname}.yml
  • modules/{module}/config/filters.yml
  • modules/{module}/config/filters_{hostname}.yml

高負荷なアプリケーションではディスクI/Oを極力減らしたいため、現状実装は見送っています。

代案として、Delta_SQLLoggingFilterはデバッグモードが有効な場合のみロギングするといった対応はどうでしょうか。

@kazoo712
Copy link
Author

代案として、Delta_SQLLoggingFilterはデバッグモードが有効な場合のみロギングするといった対応はどうでしょうか。

はい、こちらで構いません。
しかし、SQLのロギングはデバッグか否かとは別軸かと考えます(プロダクション環境でもSQLロギングした場合もある)ので、デバッグのoutput設定とは別に、SQLロギング専用の設定箇所を設けて欲しいです。(application.yml の debug, logger あたりに追加して頂けると助かります。)

@naomichi-y
Copy link
Owner

指摘の点は以前から対応しようと思ってて忘れてました!
が、属性名の定義を考える必要があると思います。

{config/application.yml}

# pattern 1
debug:
  output: TRUE
  xxx: TRUE # SQLログフィルタの有効化・無効化。属性名だけを見たとき、どのクラスと連携しているのか分かりにくい (原則的に application.yml に定義されている他の属性は、特定クラスの動作のみ変えるような機能を持っていないため)

# pattern 2
debug:
  output: TRUE
  sqlLoggingFilter:
    enable: TRUE # 属性の定義がイマイチ (global_filters.yml の形式と被る)

@naomichi-y
Copy link
Owner

因みに global_filters.yml (fiters.yml) は enable という属性を持っており、FALSE 指定時は対象フィルタが実行されないという特性を持っています。

- class: Delta_SQLLoggingFilter
  enable: TRUE

トリッキーな技...

- class: Delta_SQLLoggingFilter
  enable: <?php echo (...) ? TRUE:FALSE ?>

@kazoo712
Copy link
Author

因みに global_filters.yml (fiters.yml) は enable という属性を持っており、FALSE 指定時は対象フィルタが実行されないという特性を持っています。

どうもありがとうございます。
当面はこの方法を利用させていただこうかと思います!

ですが、できればバージョン管理下で差分を発生させたくないので、バージョン管理されないようなファイル(例:ホスト拡張ファイル)で管理したいです。
なので、global_filters.yml のホスト拡張ファイルが現実的に難しいのであれば、SQLのロギングに関しては application.yml で設定できるようにしたいです。

原則的に application.yml に定義されている他の属性は、特定クラスの動作のみ変えるような機能を持っていないため

クラス単位で制御できるにこしたことはないかもしれませんが、そこまで細かくできなくとも全体としてSQLのロギングの制御だけできればよいかと考えています。
クラス単位での管理をするのであれば、debug 属性側で管理するのではなく、logger 側の設定で管理するのがよいのではと思いますがいかがでしょうか?

logger:
  sqlLoggingAppender:
    enable: FALSE # デフォルトは TURE

が、属性名の定義を考える必要があると思います。

debug 側で設定される場合は、特にこだわりがありませんが、個人的には # pattern 2 の方が良いかとは思いました。
形式が他の箇所と似るようでしたら、以下の様な形式はいかがでしょうか?
(特にこだわりはありませんので一任致します。)

debug:
  output: TRUE
  logging:
    sql: FALSE # デフォルトは TURE

または、そもそも application.yml の logger のアペンドの記述をホスト拡張ファイルにて丸々コメントアウトすればよいかとも思ったのですが、global_filter.yml に記述して application.yml の logger のアペンドの記述がないと delta のエラーが発生するので、そちらの仕様を直して頂くでも構いません。
( ※ 拡張ファイルでロギングの on/off を制御できれば形式にはこだわりません。 )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants