level = Logger::toMonologLevel($level); $this->skipStackFramesCount = $skipStackFramesCount; } public function __invoke(array $record) { // return if the level is not high enough if ($record['level'] < $this->level) { return $record; } $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); $i = 1; // Skip everything that we shouldn't display while (in_array($trace[$i]['function'], $this->skipFunctions) || !isset($trace[$i - 1]['file']) || in_array(basename($trace[$i - 1]['file']), $this->skipFiles)) { $i++; } // we should have the call source now $record['extra'] = array_merge( $record['extra'], [ 'file' => isset($trace[$i - 1]['file']) ? basename($trace[$i - 1]['file']) : null, 'line' => isset($trace[$i - 1]['line']) ? $trace[$i - 1]['line'] : null, 'function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : null, ] ); return $record; } }