8

PHP でファイルにロギング メカニズムを実装したいと思います。

  1. ログファイルのパスは設定ファイル config.php にあります
  2. いくつかのクラスで、いくつかのイベントをログ ファイルに記録したいと考えています。

例えば:

    Class A {

        public function f_A {
            log_to_file($message);
        }

    }

    Class B {

        public function f_B {
            log_to_file($message);
        }

    }

どんなヒントにもとても感謝します。簡単でエレガントなソリューションを実装したいと思います。

私はそれについて考えていました(あなたの答えに感謝します)そして、私はこのようにすると思います(おそらく、いくつかのエラーがあり、ゼロから書いていました):

interface Logger {
    public function log_message($message);
}

class LoggerFile implements Logger {
    private $log_file;

public function __construct($log_file) {
    $this->log_file = $log_file;
}
public function log_message($message) {
        if (is_string($message)) {
            file_put_contents($this->log_file, date("Y-m-d H:i:s")." ".$message."\n", FILE_APPEND);
        }
    }
}

//maybe in the future logging into database

class LoggerDb implements Logger {
    private $db;

    public function __construct($db) {
        //some code
    }
public function log_message($message) {
        //some code
    }
}

Class A {
    private $logger;

public function __construct(Logger $l) {
        $this->logger = $l;
    }


public function f_A {
    $this->logger->log_message($message);
}
}

Class B {
    private $logger;

public function __construct(Logger $l) {
        $this->logger = $l;
    }


public function f_B {
    $this->logger->log_message($message);
}
}

//usage:

//in config.php:

define("CONFIG_LOG_FILE", "log/app_log.log");

//in the index.php or some other files

$logger = new LoggerFile(CONFIG_LOG_FILE);

$instance_a = new A($logger);
$instance_b = new B($logger);
4

3 に答える 3

1

ロガーの目標は、デバッグ情報を保存することです。ロガーは、メッセージと苦痛のレベルを保存するためのインターフェースを持つクラスでなければなりません。実装は二次的なものです。今日、ファイルのログが必要です。明日、ログをデータベースに入れたいと思うかもしれません。そのため、そのロジックはロガー クラス側で記述する必要があります。Monolog https://github.com/Seldaek/monologと呼ばれる素敵なロガーが既に書かれています

于 2013-09-07T14:56:13.183 に答える