5
6

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.

PHP のエラーログで中途半端なスタックトレースが記録されるのは log_errors_max_len の制限にかかっているから

Posted at

次のコードを実行すると、

<?php
function orearesoredorekoremore($n)
{
    if ($n > 0) {
        orearesoredorekoremore($n - 1);
    } else {
        throw new Exception("oops!");
    }
}

orearesoredorekoremore(50);

次のようにエラーが表示されます。

$ php z.php

Fatal error: Uncaught exception 'Exception' with message 'oops!' in /tmp/z.php:7
Stack trace:
# 0 /tmp/z.php(5): orearesoredorekoremore(0)
# 1 /tmp/z.php(5): orearesoredorekoremore(1)
# 2 /tmp/z.php(5): orearesoredorekoremore(2)
# 3 /tmp/z.php(5): orearesoredorekoremore(3)
# 4 /tmp/z.php(5): orearesoredorekoremore(4)
# 5 /tmp/z.php(5): orearesoredorekoremore(5)
# 6 /tmp/z.php(5): orearesoredorekoremore(6)
# 7 /tmp/z.php(5): orearesoredorekoremore(7)
# 8 /tmp/z.php(5): orearesoredorekoremore(8)
# 9 /tmp/z.php(5): orearesoredorekoremore(9)
# 10 /tmp/z.php(5): orearesoredorekoremore(10)
# 11 /tmp/z.php(5): orearesoredorekoremore(11)
# 12 /tmp/z.php(5): orearesoredorekoremore(12)
# 13 /tmp/z.php(5): orearesoredorekoremore(13)
# 14 /tmp/z.php(5): orearesoredorekoremore(14)
# 15 /tmp/z.php(5): orearesoredorekoremore(15)
# 16 /tmp/z.php(5): orearesoredorekoremore(16)
# 17 /tmp/z.php(5): orearesoredorekoremore(17)
# 18 /tmp/z.php(5): orearesoredorekoremore(18)
# 19 /tmp/z.php(5): orearesoredorekoremore(19)
# 20 /tmp/z.php(5): orearesoredorekoremore(2 in /tmp/z.php on line 7

#20 /tmp/z.php(5): orearesoredorekoremore(2 in /tmp/z.php on line 7
の辺りがおかしいですが、これは log_errors_max_len の制限に掛かっているためです。

log_errors_max_len のデフォルトは 1024 です。

$ php -i | grep log_errors_max_len
log_errors_max_len => 1024 => 1024

下記の部分が丁度 1024 バイトになっています。

Uncaught exception 'Exception' with message 'oops!' in /tmp/z.php:7
Stack trace:
# 0 /tmp/z.php(5): orearesoredorekoremore(0)
# 1 /tmp/z.php(5): orearesoredorekoremore(1)
# 2 /tmp/z.php(5): orearesoredorekoremore(2)
# 3 /tmp/z.php(5): orearesoredorekoremore(3)
# 4 /tmp/z.php(5): orearesoredorekoremore(4)
# 5 /tmp/z.php(5): orearesoredorekoremore(5)
# 6 /tmp/z.php(5): orearesoredorekoremore(6)
# 7 /tmp/z.php(5): orearesoredorekoremore(7)
# 8 /tmp/z.php(5): orearesoredorekoremore(8)
# 9 /tmp/z.php(5): orearesoredorekoremore(9)
# 10 /tmp/z.php(5): orearesoredorekoremore(10)
# 11 /tmp/z.php(5): orearesoredorekoremore(11)
# 12 /tmp/z.php(5): orearesoredorekoremore(12)
# 13 /tmp/z.php(5): orearesoredorekoremore(13)
# 14 /tmp/z.php(5): orearesoredorekoremore(14)
# 15 /tmp/z.php(5): orearesoredorekoremore(15)
# 16 /tmp/z.php(5): orearesoredorekoremore(16)
# 17 /tmp/z.php(5): orearesoredorekoremore(17)
# 18 /tmp/z.php(5): orearesoredorekoremore(18)
# 19 /tmp/z.php(5): orearesoredorekoremore(19)
# 20 /tmp/z.php(5): orearesoredorekoremore(2

log_errors_max_len=0 を指定すれば無制限になるので、最後まですべて表示されます。

$ php -d log_errors_max_len=0 z.php

Fatal error: Uncaught exception 'Exception' with message 'oops!' in /tmp/z.php:7
Stack trace:
# 0 /tmp/z.php(5): orearesoredorekoremore(0)
# 1 /tmp/z.php(5): orearesoredorekoremore(1)
# 2 /tmp/z.php(5): orearesoredorekoremore(2)
 :
# 98 /tmp/z.php(5): orearesoredorekoremore(98)
# 99 /tmp/z.php(5): orearesoredorekoremore(99)
# 100 /tmp/z.php(11): orearesoredorekoremore(100)
# 101 {main}
  thrown in /tmp/z.php on line 7
5
6
0

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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?