【PHP】ログをファイルに書き込むクラスの作成方法

PHP

PHPでログをファイルに書き込むクラスの作成方法を紹介します。

ログを作成するクラス

<?php
 class FileWrite {

    // プロパティ
    private $filename;
    private $content = '';
    public const APPEND = FILE_APPEND;

    // コンストラクタ関数
    function __construct($filename) {
        $this->filename = $filename;
    }

    // 内容を追加するメソッド
    function append($content) {
        // 渡されるcontentをこのクラスのcontentに格納する
        // 渡ってきた内容を結合していくので.=
        // $thisのformat()をcontentに加える
        $this->content .= $this->format($content);

        // チェーンメソッドが活用できるようにreturn で$thisを返す
        return $this;
    }
    // format()では継承したクラスで拡張するので、単に内容を返すだけにする
    // 外部から呼ばれないようにするためい自クラスか継承したクラスのみで呼び出せるprotectedをつける
    protected function format($content) {
        return $content;
    }
    // 改行するメソッド
    function newline() {
        $this->content .= PHP_EOL;
        return $this;
        // return $this->append(PHP_EOL);
    }
    // ファイルを書き込む
    // 第三引数を渡す場合とそうでない場合があるのでデフォルト値をnull
    function commit($flag = null) {
        // ファイルを書き込む
        file_put_contents($this->filename, $this->content, $flag);
        // 内容を空にする
        $this->content = '';
        
        return $this;
    }

 }

 class LogWrite extends FileWrite {

    
    protected function format($content) {
        $time_str = date('Y/m/d H:i:s');
        // 日付と時間を先頭につけ、returnする
        return sprintf('%s %s', $time_str, $content);
    }
 }

//  インスタンス化
$info = new LogWrite('info.log');
$error = new LogWrite('error.log');

// 実行
$info->append('これは通常ログです。')
    ->newline()
    ->commit(LogWrite::APPEND);

$error->append('これはエラーログです。')
    ->newline()
    ->commit(LogWrite::APPEND);

// 2022/03/27 08:26:22 これはエラーログです。
// 2022/03/27 08:26:27 これはエラーログです。

// 2022/03/27 08:26:22 これは通常ログです。
// 2022/03/27 08:26:27 これは通常ログです。

FileWrite()では、format()は単に内容を返すだけにして、継承したLogWeite()クラスにてformat()を拡張した機能を持たせています。
また、外部から呼ばれないようにするためい自クラスか継承したクラスのみで呼び出せるprotectedをつけています。

ログを書き込む方法

file_put_contentsを使用することでファイルに書き込むことができます。
file_put_contentsの使い方は、ファイル書き込みを行うためのクラスの作成方法を参照してみてください。

date()関数でフォーマットを作成

data()にフォーマットを渡すことで、任意の形式の日付や時間を出力できます。

sprintf()でフォーマット

sprintf()でフォーマットできます。
sprintf('%s %s', $time_str, '文字列');という形式なら、
最初の%s$time_strを意味し、もうひとつのほうが文字列を意味します。

PHP

Posted by devsakaso