@@ -27,45 +27,52 @@ class DebugHandlersListener implements EventSubscriberInterface
27
27
private $ exceptionHandler ;
28
28
private $ logger ;
29
29
private $ levels ;
30
- private $ debug ;
30
+ private $ throwAt ;
31
+ private $ scream ;
32
+ private $ fileLinkFormat ;
31
33
32
34
/**
33
- * @param callable $exceptionHandler A handler that will be called on Exception
35
+ * @param callable|null $exceptionHandler A handler that will be called on Exception
34
36
* @param LoggerInterface|null $logger A PSR-3 logger
35
37
* @param array|int $levels An array map of E_* to LogLevel::* or an integer bit field of E_* constants
36
- * @param bool $debug Enables/disables debug mode
38
+ * @param int|null $throwAt Thrown errors in a bit field of E_* constants, or null to keep the current value
39
+ * @param bool $scream Enables/disables screaming mode, where even silenced errors are logged
37
40
* @param string $fileLinkFormat The format for links to source files
38
41
*/
39
- public function __construct ($ exceptionHandler , LoggerInterface $ logger = null , $ levels = null , $ debug = true , $ fileLinkFormat = null )
42
+ public function __construct ($ exceptionHandler , LoggerInterface $ logger = null , $ levels = null , $ throwAt = - 1 , $ scream = true , $ fileLinkFormat = null )
40
43
{
41
44
$ this ->exceptionHandler = $ exceptionHandler ;
42
45
$ this ->logger = $ logger ;
43
46
$ this ->levels = $ levels ;
44
- $ this ->debug = $ debug ;
47
+ $ this ->throwAt = is_numeric ($ throwAt ) ? (int ) $ throwAt : (null === $ throwAt ? null : ($ throwAt ? -1 : null ));
48
+ $ this ->scream = (bool ) $ scream ;
45
49
$ this ->fileLinkFormat = $ fileLinkFormat ?: ini_get ('xdebug.file_link_format ' ) ?: get_cfg_var ('xdebug.file_link_format ' );
46
50
}
47
51
48
52
public function configure ()
49
53
{
50
- if ($ this ->logger ) {
51
- $ handler = set_error_handler ('var_dump ' , 0 );
52
- $ handler = is_array ($ handler ) ? $ handler [0 ] : null ;
53
- restore_error_handler ();
54
- if ($ handler instanceof ErrorHandler) {
55
- if ($ this ->debug ) {
56
- $ handler ->throwAt (-1 );
57
- }
54
+ $ handler = set_error_handler ('var_dump ' , 0 );
55
+ $ handler = is_array ($ handler ) ? $ handler [0 ] : null ;
56
+ restore_error_handler ();
57
+ if ($ handler instanceof ErrorHandler) {
58
+ if ($ this ->logger ) {
58
59
$ handler ->setDefaultLogger ($ this ->logger , $ this ->levels );
59
60
if (is_array ($ this ->levels )) {
60
- $ scream = 0 ;
61
+ $ levels = 0 ;
61
62
foreach ($ this ->levels as $ type => $ log ) {
62
- $ scream |= $ type ;
63
+ $ levels |= $ type ;
63
64
}
64
- $ this ->levels = $ scream ;
65
+ } else {
66
+ $ levels = null === $ this ->levels ? E_ALL | E_STRICT : $ this ->levels ;
65
67
}
66
- $ handler ->screamAt ($ this ->levels );
68
+ if ($ this ->scream ) {
69
+ $ handler ->screamAt ($ levels );
70
+ }
71
+ $ this ->logger = null ;
72
+ }
73
+ if (null !== $ this ->throwAt ) {
74
+ $ handler ->throwAt ($ this ->throwAt , true );
67
75
}
68
- $ this ->logger = $ this ->levels = null ;
69
76
}
70
77
if ($ this ->exceptionHandler ) {
71
78
$ handler = set_exception_handler ('var_dump ' );
0 commit comments