diff --git a/bin/php-language-server.php b/bin/php-language-server.php index f46304d..419069d 100644 --- a/bin/php-language-server.php +++ b/bin/php-language-server.php @@ -2,9 +2,10 @@ use LanguageServer\{LanguageServer, ProtocolStreamReader, ProtocolStreamWriter}; use Sabre\Event\Loop; -use Symfony\Component\Debug\ErrorHandler; use Monolog\Logger; use Monolog\Handler\StreamHandler; +use Monolog\Formatter\LineFormatter; +use Monolog\ErrorHandler; $options = getopt('', ['tcp::', 'memory-limit::']); @@ -17,11 +18,37 @@ foreach ([__DIR__ . '/../../../autoload.php', __DIR__ . '/../autoload.php', __DI } } -$logger = new Logger('Errors'); -$logger->pushHandler(new StreamHandler(STDERR)); -$errorHandler = new ErrorHandler; -$errorHandler->setDefaultLogger($logger); -ErrorHandler::register($errorHandler); +function errorHandler($level, $message, $file, $line) { + // error code is not included in error_reporting + if (!(error_reporting() & $level)) { + return; + } + + if ($level !== E_DEPRECATED && $level !== E_USER_DEPRECATED) { + throw new \ErrorException($message, 0, $level, $file, $line); + } + + fwrite(STDERR, 'Deprecation Notice: '.$message.' in '.$file.':'.$line.''); +} + +function setupLogging() { + error_reporting(E_ALL | E_STRICT); + set_error_handler('errorHandler'); + + $formatter = new LineFormatter("[%datetime%] %level_name%: %message% %context% %extra%\n"); + $formatter->includeStacktraces(true); + $formatter->ignoreEmptyContextAndExtra(true); + + $handler = new StreamHandler(STDERR); + $handler->setFormatter($formatter); + + $logger = new Logger('php language server'); + $logger->pushHandler($handler); + + ErrorHandler::register($logger, false); +} + +setupLogging(); @cli_set_process_title('PHP Language Server');