2011-04-20 31 views
0

ログメッセージを吐き出すロガークラス(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に向かっています - それを簡単に保ちます。

答えて

0

私は修正のビットと最初の1でいいと思う:

あなたのようなステートメントを使用してロガーと呼ばれると仮定すると:私は置き換えたい

Logger::messageWarning($message) 

ものと

Logger::messageWarning($message, EventId:someconstant) 

とし、イベントIDクラスを

と定義してください。
abstract class EventId { 
    const UNSPECIFIED = 1; 
    const LOGIN = 2; 
    const VALIDATION_FAILURE = 3; 
    // etc 
} 

あなたのロガー関数は2番目のパラメータを受け取りますが、デフォルト値はEventId:UNSPECIFIEDです。

class Logger { 
... 
    function messageWarning($message, $message_type = EventId:UNSPECIFIED) { 
    ... 
    } 
} 

既存のコードを壊さないこの方法では、#3に概説されハックをしない、とあなたはイベントの種類を追加することにより、必要なときにどこで、あなたのログの呼び出しを置き換えることができます。

関連する問題