問題タブ [psr-3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - ログ行のフォーマット
PSR-3 標準に基づくロギング システムの実装に問題があります (およびそれに付属するインターフェイス/クラス - https://github.com/php-fig/log )。
PSR-3 を拡張するいくつかのクラスを作成しました: ロガーはアダプターを使用して実際のログを記録し (ロガー クラスはアダプター インスタンスを格納し、log() メソッドを呼び出します)、ファイル アダプター (ログ メッセージをファイルに書き込むアダプター) にたどり着きました。 )) カスタム ログ行形式を実装する方法を探しています。つまり、メッセージを次のようにログに記録できます
[01/01/2013 12:00:00] NOTICE: Log message content\n
としても
user: Log message content (NOTICE) ~ 01-01-2013
(完全受注生産品と内容)
また、そのために別のクラスを作成したいと思います。
非常に簡単な方法でそれを行う方法はありますか?他の人(スキルの低いphpersでさえ)がこれを変更しても問題はありませんか?
php - 複数行の関数呼び出しの開き括弧は、行の最後の内容でなければなりません
PHPファイルにこのコードを書きます:
PHP Code Sniffer を使用して確認すると、次のエラーが表示されます。
複数行の関数呼び出しの開き括弧は、行の最後の内容でなければなりません
これらのエラーは、次の行から発生します。
それを修正する方法は?ありがとう
php - クラスをコールバック関数に渡す最良の方法
PSR-3 ロギング クラスを使用しており、 と組み合わせて使用しようとしていset_error_handler()
ます。私の質問は、ログ オブジェクトを適切に「取得」する にはどうすればよいですか?
簡単な例:
私のErrorHandler.php
:
私のLogger.php
:
ロガーは開始される場合と開始されない場合があることに注意してください。アイデアは、何らかの方法で別のロガーを簡単に定義できるようにすることです。
少なくとも 2 つのオプションがあることに気付きました。これは、単純に呼び出されたグローバル変数$logger
または同様のものを使用し、それを使用することです (Logger
私の特定の例では、オブジェクトはグローバル スコープで初期化されませんが)。 「今回だけ」のシングルトン パターン。Logger
クラス内で静的メソッドを定義して、次のようなものを使用できるようにします。
私はシングルトン パターンについて非常に厳しいことを言っているのをたくさん見てきましたが、それを「アンチパターン」と呼んでいる人さえいます。プロジェクトの残りの部分では、依存性注入を (できる限りうまく) 使用しています。
別のオプションがありませんか、それともこれを行う「正しい」方法はありますか?
php - PHP でアプリケーション/Web サイト全体でロガーにアクセスする最良の方法
私は最近PSR-3
、Web アプリケーションまたは Web サイト全体でロガーの実装にアプローチする最良の方法について読んで興味を持っています。ロガーがどのように定義され、PSR-3 ごとにどのように実装できるかは理解していますが、キャッチされた例外、重要なイベントなどのさまざまなログのニーズのために、アプリケーション全体でそれらにアクセス/参照することはどうですか?
この3つの選択肢が頭に浮かびました。もうありますか?最適なアプローチはどれですか?
- グローバル オブジェクト -
$logger->debug('foo')
- グローバル静的インスタンス -
Logger::debug('foo')
- 何らかの方法で -
$app->getLogger()->debug('foo')
- ...等...
私の考慮事項の 1 つは、ロガーを参照するために必要なコードを最小限に抑えることです。たとえば、上記のオプション 3 では、アプリケーション全体で適切にキャッチされた例外、注目すべきイベントなどごとにロガーを取得するのはかなり面倒に思えます。
php - PSR ログ - LoggerAwareInterface と LoggerAwareTrait に NULL デフォルト値がない理由
Githubのサンプルによると、デフォルト値の NULL を使用してコンストラクターにロガー インターフェイスを挿入します。
実装できる LoggerPsr\Log\LoggerAwareInterface
とPsr\Log\LoggerAwareTrait
.
サンプルコードを再構築すると、次のようになります
それは問題なく機能していますが、私がこれを行うとしたら
must be an instance of Psr\Log\LoggerInterface, null given
インターフェイスのメソッド宣言に NULL デフォルト値がないため、エラーになります。もちろん、このエラーは if でガードするか を渡すことで防ぐことができますがNullLogger
、これは非常に奇妙です。
コンストラクターでオプションの Logger インスタンスを渡すことができると、後で Logger を NULL の値に設定することでインスタンスを変更できると思います。もちろんこれはサンプルコードですが、問題を見てみましょう
したがって、基本的にコンストラクターに NULL 参照を渡すことはできますが、NULL は許可されていないため、セッターを呼び出すことはできません。Psr\Log\LoggerAwareInterface
こんな感じだったらもっと良かったのに
では、この決定の背景を教えてください。