ログメッセージを吐き出すロガークラス(PHPでは、問題はありません)があります。ロガーはカスタム実装であり、うまく機能します。しかし、これを拡張して、それぞれタイプののロガーメッセージをイベントIDとして提供したいと思います。このように、「ユーザーがログインしたメッセージ」はイベントID 1、「フォームの検証に失敗しました」はイベントID 2です。ログメッセージ内のイベントIDの実装についての意見
このイベントIDの目的は、長いログの一覧を表示するときに重要でないイベントをフィルタリングすることです。イベントIDでログを分類し、データベースで部分文字列を検索するよりもクエリを高速に分類する方が早いと考えています。
私は以下のアイデアを持っていますが、実行可能な選択肢を歓迎します。私はこの例でPHPを使用しましたが、PHP/Java/C#/ etcなどのほとんどの言語に適用できるほど一般的なものが役に立ちます。
abstract class EventId {
const LOGIN = 1;
const VALIDATION_FAILURE = 2;
// etc
}
Logger::messageDebug(EventID::LOGIN, $username . " logged in");
Logger::messageWarning(EventID::VALIDATION_FAILURE, "Form failed to validate, etc.");
これの利点はシンプルですが、私はそれが少し厄介を得ることができ恐れる:
1)は対数関数呼び出しで暗黙的にIDを含めます。
2)利点は、単純であり、欠点は)イベントIDは、ハッシュ(またはいくつかの他の機能に依存している最初の文字列をハッシュ
Logger::messageDebug("%s logged in", $username);
Logger::messageWarning("The %s form failed to validate", $form);
、別個の引数としてメッセージを記録するために、可変パラメータを渡しますログメッセージの種類を区別するために、最初の文字列の
3)バックトレースとやるいくつかのnastyness
function messageDebug($message) {
$trace = obtainTraceOfCallToMessageDebug();
$callToMessageDebug = $trace[0];
$eventId = "";
$eventId .= $eventId->file;
$eventId .= $eventId->line;
$eventId = sha1($eventId);
messageImpl($eventId, $message);
}
これはかなり厄介ですが、それは、変更する必要はありませんので、既存のログ・メッセージで優位性を持っている書くときさらに、それはあまり壊れやすいです新しいログメッセージ。 PHPでは、バックトレースを取得するのは簡単で安価ですが、他の言語では、非常に厄介なExceptionを投げなければならないかもしれません。とにかく、それはアイデアです。
あなたの意見をお待ちしています。私の主な要件は、スピードよりも保守性です。私は現在番号1に向かっています - それを簡単に保ちます。