3

適切で使いやすいロギング ヘルパー クラス セット/フレームワークを探しています。

一度に 1 つのログファイルしか使用できないように見えるという事実にもかかわらず、私はAnalogを発見し、まさに私が必要としているものであることがわかりました。

私が間違っている ?!

複数のログを書き込むことができる類似の (サイズ/機能の) プロジェクトを知っていますか? おそらくアナログブランチ?私はすでにlog4php、KLogger、Monologを見てきました。

4

2 に答える 2

4

のソースコードから判断すると

同時に複数のファイル ハンドラーを使用できる必要があります。これに沿って何かを試してください:

Analog::handler(Analog\Handler\Multi::init(array(
    Analog::ERROR   => Analog\Handler\File::init('/path/to/logs/errors.log'),
    Analog::WARNING => Analog\Handler\File::init('/path/to/logs/warnings.log'),
    Analog::DEBUG   => Analog\Handler\File::init('/path/to/logs/debug.log')
)));

で動作させることができない場合Analog\Handler\Multiでも、アナログ ファイル ハンドラーを適用して、独自の複合ロガーを作成できます。これを行うには、まず、アプリケーションでロガーを使用する方法を定義するインターフェイスを作成します。

interface Logger
{
    const ERROR = 'error';
    const WARNING = 'warning';
    const DEBUG = 'debug';

    public function log($message, $level);
}

次に、Interface を満たすように Adapter for Analog を作成します。

class AnalogAdapter implements Logger
{
    private $adaptee;

    public function __construct(Analog $analog)
    {
        $this->adaptee = $analog;
    }

    public function log($message, $level)
    {
        $adaptee = $this->adaptee;
        $adaptee::log($message, $adaptee::$level);
    }
}

最後に、複合ロガーを記述します。

class CompositeLogger implements Logger
{
    private $loggers = array;

    public function registerLogger(Logger $logger)
    {
        $this->loggers[] = $logger;
    }

    public function log($message, $level)
    {
        foreach ($this->loggers as $logger)
        {
            $logger->log($message, $level);
        }
    }
}

次に、Analog ファイル ハンドラを作成し、Composite に登録します。

$logger = new CompositeLogger;
$logger->registerLogger(
    new AnalogAdapter(
        Analog\Handler\File::init('/path/to/logs/errors.log')
    )
);

// … add more Loggers in the same way

$logger->log('This is a warning', Logger::WARNING);

警告は、登録されているすべてのロガーに書き込まれます。

于 2013-04-04T10:04:52.293 に答える
1

はい、うまくいきます。また、さまざまなログ タイプに対してさまざまなログ関数を作成できます。

例えば。これにより、エラーが電子メールで送信されます。ただし、警告をログに書き込みます。

Analog::handler(Analog\Handler\Multi::init(array(
    Analog::ERROR   => Analog\Handler\Buffer::init (
    Analog\Handler\Mail::init (
        'you@example.com',
        'Log messages',
        'noreply@example.com'
    )
)
    ,Analog::WARNING => Analog\Handler\File::init(__DIR__.'/log/warning.log')
    //Analog::DEBUG   => Analog\Handler\File::init('/path/to/logs/debug.log')
)));
于 2014-06-16T23:10:57.553 に答える