PEAR Log を使って Firebug にログを出力する

  PEAR Log 1.9.11 から Firebug にログを出力することができるようになったみたいなので試してみました。

- PEAR :: Package :: Log
  http://pear.php.net/package/Log

- Firebug - Web Development Evolved
  http://www.getfirebug.com/jp.html

require_once 'Log.php';

$log = &Log::singleton('firebug', '', 'PHP', array('buffering' => true), PEAR_LOG_DEBUG);

$log->log('デバッグレベルのログ', PEAR_LOG_DEBUG);
$log->log('情報レベルのログ', PEAR_LOG_INFO); // この場合は、PEAR_LOG_INFO は省略可
$log->log('警告レベルのログ', PEAR_LOG_WARNING);
$log->log('エラーレベルのログ', PEAR_LOG_ERR);


  コードはこれだけで、log() メソッドでログを出力します。

PEAR Log Firebug

  生成される HTML は以下のようになります。

<script type="text/javascript">
console.debug("PHP [debug] デバッグレベルのログ");
console.info("PHP [info] 情報レベルのログ");
console.warn("PHP [warning] 警告レベルのログ");
console.error("PHP [error] エラーレベルのログ");
</script>


  singleton の第 4 引数はオプションですが、上記の例ではバッファリングを有効にしています。
  バッファリング有効にすると JavaScript が HTML の一番最後に追記されるようになります。
  逆に、バッファリングを有効にしない場合 (デフォルト) は、log() メソッドの場所に JavaScript が生成されるようになります。

  header() で何か出力しているときや、セッションを使う場合はバッファリングが無効だと問題になる場合があるので、そのようなときには、バッファリングを有効にすることで、問題なくログを出力することができる場合があります。

MySQL の warnings をすぐに表示させる方法

  mysql コマンドを直接たたいているときに、warning と表示されることがあります。
  例えば、次のような場合です。

mysql> CREATE TABLE test (id int) TYPE=InnoDB;
Query OK, 0 rows affected, 1 warning (0.03 sec)

  この場合 warning が 1 つ発生しています。どういった warning が発生しているかを確認するには、SHOW WARNINGS をしてみるとわかります。

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1287
Message: 'TYPE=storage_engine' is deprecated; use 'ENGINE=storage_engine' instead
1 row in set (0.02 sec)

  Message がそれにあたります。ちなみに、SHOW WARNINGS は MySQL 4.1.0 から導入されています。

- MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 4.6.8.9 SHOW WARNINGS | ERRORS
  http://dev.mysql.com/doc/refman/4.1/ja/show-warnings.html

  さて、本題ですが、warning を見るためにいちいち SHOW WARNINGS をタイプするのは面倒です。
  そこで、--show-warnings オプションを紹介します。マニュアルによると以下のように説明されています。

警告が存在する場合、各ステートメント後に表示させます。このオプションはインタラクティブとバッチモードにのみ対応しています。

  ただし、このオプションは MySQL 5.0.x から用意されているようです (手元にある 5.0.37 では実装されていました)。

  使い方は、いたって簡単で --show-warnings オプションをつけるだけです。

$ mysql --show-warnings -uroot -p test

  上記と同じように warning が表示される SQL を入力しています。

mysql> CREATE TABLE test (id int) TYPE=InnoDB;
Query OK, 0 rows affected, 1 warning (0.01 sec)

Warning (Code 1287): 'TYPE=storage_engine' is deprecated; use 'ENGINE=storage_engine' instead

  見てのとおり、警告がすぐに表示されました。

  もちろん、~/.my.cnf などに書いても問題ありません。

[mysql]
show-warngins



- MySQL AB :: MySQL 5.1 リファレンスマニュアル :: 7.7.1 mysql オプション
  http://dev.mysql.com/doc/refman/5.1/ja/mysql-command-options.html#id268974 ...