2

APPLICATION_PATHに相対的なファイル名に書き込むようにZend_Log_Writer_Streamインスタンスを構成するための最良の方法を見つけようとしています。

たとえば、次の設定を使用します。

resources.log.stream.writerName = "Stream"
resources.log.stream.writerParams.stream = "logs/production.log"

logggerを初期化する通常の方法は、アプリケーションのブートストラップリソースを使用するか、次のいずれかを実行することです。

$logger = Zend_Log::factory($config->resources->log);

これに伴う問題は、Zend_Log_Writer_Stream :: factoryメソッドが、APPLICATION_PATHではなく、現在のスクリプト実行に関連してファイルにアクセスしようとすることです。

ほとんどの場合、これを開始するのは/ public内のindex.phpであるため、通常はドラマではありませんが、単体テストディレクトリ内で個々のスクリプトを実行すると、そのディレクトリを使用してパスのベースになります。

理想的には、次のように設定できるようにしたいと思います。

resources.log.stream.writerParams.stream = APPLICATION_PATH . "../logs/production.log"

常に予測可能な場所を使用するようにします。これを機能させるために、Zend_Log継承クラスのファクトリメソッドをハックする必要はありません。

他の人がこの問題をどのように解決したか聞いてみたいです。

4

2 に答える 2

6
resources.log.stream.writerParams.stream = APPLICATION_PATH "../logs/production.log"

動作するはずです。parse_ini_file()(によって使用されます)は定数の使用を許可します-しかし、連結はPHP(演算子Zend_Config_Iniを使用)のようには機能しません。.静的文字列を定数に追加するだけです(で終わらない/場合は、追加が必要になる場合があります)。APPLICATION_PATH/

于 2010-11-11T08:15:54.417 に答える
1

Zend_Config_Iniparse_ini_file内部でapplication.iniを読み取るために使用します。つまり、定数を解析する必要があります。理想的なアプローチでお試しください。application.iniをロードする前に、定数が定義されていることを確認してください

編集:使用する正しい形式についてのStefanGehrigのメモも参照してください

于 2010-11-11T08:12:00.523 に答える