ログ出力

guessworkには、コントローラクラス内での動作をログファイルに記録するためのロギング機構が用意されています。

準備

ロギング機構を使用するにはまずコントローラクラスのクラス変数「$_gw_log_file」にログファイルのパスを設定します。

class LoggingController extends Controller
{
    var $_gw_log_file = "/path/to/logfile";
}

指定されたファイルが存在する場合はそのファイルへの追記が行われ、存在しない場合はファイルが新規に作成されます。なお、いずれの場合もWebサーバの動作権限でファイルへの書き込みができるようパーミッションを設定しておく必要があります(ファイルが存在しない場合は親ディレクトリにパーミッションを設定しておかないとファイルの作成ができない場合があります)。

$_gw_log_fileにフルパスではなく相対パスを記述した場合は、そのPHPスクリプトからの相対パスとして扱われます。

ログへの出力

ログファイルにメッセージを出力する際はControllerクラスの「getLogger()」メソッドで、Loggerオブジェクトを取得してから、ログレベルに合わせたメソッドを呼び出します。

class LoggingController extends Controller
{
    var $_gw_log_file = "/path/to/logfile";

    function executeDefault()
    {
        $log =& $this->getLogger();
        $log->trace("traceレベルのメッセージ");
        $log->debug("debugレベルのメッセージ");
        $log->info("infoレベルのメッセージ");
        $log->warn("warnレベルのメッセージ");
        $log->error("errorレベルのメッセージ");
        $log->fatal("fatalレベルのメッセージ");
    }
}

ログファイルには以下の内容が記録されます。

2004/10/25 02:19:53 [TRACE] traceレベルのメッセージ
2004/10/25 02:19:53 [DEBUG] debugレベルのメッセージ
2004/10/25 02:19:53 [INFO] infoレベルのメッセージ
2004/10/25 02:19:53 [WARN] warnレベルのメッセージ
2004/10/25 02:19:53 [ERROR] errorレベルのメッセージ
2004/10/25 02:19:53 [FATAL] fatalレベルのメッセージ

ログレベルの設定

ログレベルはレベルが低いほうから順にtrace、debug、info、warn、error、fatalの6種類があり、コントローラクラスのクラス変数「$_gw_log_level」に設定されたレベルよりも下のメッセージはファイルに記録されなくなります。

class LoggingController extends Controller
{
    var $_gw_log_file = "/path/to/logfile";
    var $_gw_log_level = GW_LOG_ERROR;

    function executeDefault()
    {
        $log =& $this->getLogger();
        $log->trace("記録されない");
        $log->debug("記録されない");
        $log->info("記録されない");
        $log->warn("記録されない");
        $log->error("記録される");
        $log->fatal("記録される");
    }
}

上記の例ではログレベルをerrorレベルに設定しているため、traceからwarnまでのメッセージが記録されなくなります。ログレベルはそれぞれ以下の定数で指定します。

ログレベルのチェック

特定のログレベルの場合に処理を行いたい場合には、以下のようにLoggerクラスのメソッドを利用します。

if ($this->getLogger()->isDebug()) {
  // デバッグレベルの場合
}

ログレベルをチェックするLoggerクラスのメソッドは以下の通りです。