13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ログをデバッグ時にブラウザに出力する

Last updated at Posted at 2015-03-07

2015年の現在であってもPHPでのWebアプリケーション開発は、なんだかんだといってブラウザでの目視確認に頼りがちだ。

なので、ロガーに流した内容は開発環境ではブラウザでそのまま見えた方がべんり… なこともあるんじゃないかなあ、たぶん。

そんなわけで、Logger Guardなるものを作った。

PSR-3についてご存じない方は PSR-3 Logger Interfaceの話 - 泥のように を読んでほしい。

インストール

Composerをインストールしてるプロジェクトなら、コマンドラインで composer require 'zonuexe/logger-guard' って実行するだけですよ。

設定

このライブラリは、あくまでデバッグ用(当たり前だ)なので、開発環境以外でnew Teto\Logger\Guardされることがないように注意して欲しい。

<?php

$logger = new \Monolog\Logger('myapp');
$logger->pushHandler(new \Monolog\Handler\ErrorLogHandler);

// 開発環境では define('DEBUG', true) してある想定
if (defined('DEBUG') && DEBUG) {
    $guard = new Teto\Logger\Guard($logger, 'notice');
}

// ↓ あとはふつうに実装するだけ

$logger->debug('printデバッグ');
$logger->info('ログイン情報とか');
$logger->error('エラーっぽい感じ');
$logger->warning('怪しげな感じ');
$logger->notice('大事なことなのでry');
$logger->crit('致命的なエラーとか');
$logger->alert('たすけてえーりん');
$logger->emerg('もうだめぽ');

// 後処理は特に書く必要はなくて、勝手に出力される

あと、Monologはかなり柔軟で扱ひやすい構造になってるので、知らなかったひとは使ってみてほしい。

出力

headers_list()から勝手にレスポンスのContent-typeを取得してきてログのフォーマッターを選ぶので、別に何もしなくていい。

Content-type: text/plain みたいなときは、ちゃんとHTMLが吐かれないようにはしてる。

Guardって何

オブジェクトのデストラクタで副作用を起こすことを目的にした実装パターンのことを guard object とか scope guard とか呼ぶらしいので、それにあやかった。

C++もPerlもよくわかんないんだけど。

デストラクタから例外が投げられると致命的エラーになるので使ひどころを見極めるのが難しい処理ではあるのだけれど、今回のようにデバッグ用途でならアリかな、と言った感じだ。

あとがき

PHPにもマクロ欲しいなと思った。

追記

良い質問ですね!

これを利用するには、お手元のGoogle ChromeにChrome Logger - Chrome ウェブストアをインストールして、コードに一行追加するだけで良い。

<?php

$logger = new \Monolog\Logger('myapp');
$logger->pushHandler(new \Monolog\Handler\ErrorLogHandler);

// 開発環境では define('DEBUG', true) してある想定
if (defined('DEBUG') && DEBUG) {
    // ↓ この行を追加するだけ
    $logger->pushHandler(new \Monolog\Handler\ChromePHPHandler('NOTICE'));
    // ↑ ここまで
    $guard = new Teto\Logger\Guard($logger, 'notice');
}

Guardは全然関係なかった! この場合も、開発環境の外でお漏らししないように気をつけてくださいね。

FirePHPってのもあるらしく、Monologも対応してるので、興味があったら調べてみてください。

13
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?