PHP Version
8.2
CodeIgniter4 Version
4.6.5
CodeIgniter4 Installation Method
Composer (using codeigniter4/appstarter)
Which operating systems have you tested for this bug?
Linux, Windows
Which server did you use?
apache
Environment
development
Database
No response
What happened?
We replaced CI4 Logger with Monolog Logger (3.9.0) for its flexibility (mostly so that we can log in console and in ECS format).
We recently updated the CI version from 4.6.3 to 4.6.5. When running the application in "development" environment, we encountered the following error messages:
Undefined property: Monolog\Logger::$logCache
- SYSTEMPATH\Debug\Toolbar\Collectors\Logs.php at line 95
- SYSTEMPATH\Debug\Toolbar\Collectors\Logs.php : 60
- SYSTEMPATH\Debug\Toolbar\Collectors\BaseCollector.php : 228
- SYSTEMPATH\Debug\Toolbar.php : 95
- SYSTEMPATH\Debug\Toolbar.php : 390
- SYSTEMPATH\Filters\DebugToolbar.php : 44
- SYSTEMPATH\Filters\Filters.php : 278
- SYSTEMPATH\Filters\Filters.php : 225
- SYSTEMPATH\CodeIgniter.php : 525
- SYSTEMPATH\CodeIgniter.php : 354
- SYSTEMPATH\Boot.php : 363
- SYSTEMPATH\Boot.php : 68
- FCPATH\index.php : 59
Steps to Reproduce
We followed the guidelines in Using Third-Party Loggers to create our own logger service.
namespace Config;
use CodeIgniter\Config\BaseService;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;
use Monolog\Processor\PsrLogMessageProcessor;
use Monolog\Logger;
use Psr\Log\LoggerInterface;
class Services extends BaseService
{
public static function logger(bool $getShared = true): LoggerInterface
{
if ($getShared) {
return static::getSharedInstance('logger');
}
$formatter = new LineFormatter();
$formatter->setDateFormat(DATE_RFC3339_EXTENDED);
$handler = new StreamHandler(WRITEPATH . 'logs/app.log', 'debug');
$handler->setFormatter($formatter);
$logger = new Logger('sample-app');
$logger->pushHandler($handler);
$logger->pushProcessor(new PsrLogMessageProcessor());
return $logger;
}
}
This setup would create an error of the Logs collector is enabled in Config\Toolbar. Disabling it works fine
namespace Config;
class Toolbar extends BaseConfig
{
public array $collectors = [
Timers::class,
Database::class,
Logs::class,
Views::class,
// \CodeIgniter\Debug\Toolbar\Collectors\Cache::class,
Files::class,
Routes::class,
Events::class,
];
}
Expected Output
I'm not sure if the Logs collector should work with 3rd-party PSR-3 Loggers or not, but if not, maybe a check would be nice if Logger->logCache actually exists.
We expect that there are no issues with the DebugToolbar if support for 3rd-party loggers is possible.
Anything else?
I think the problem already occurred first since version 4.6.4, though not tested yet.
Above's code example created the following log lines in writable/logs/app.log (except for the Route and Filter parameter parts).
[2026-05-07T09:14:58.602+01:00] sample-app.CRITICAL: ErrorException: Undefined property: Monolog\Logger::$logCache [Method: GET, Route: dashboard/deliveries/index/false] in SYSTEMPATH\Debug\Toolbar\Collectors\Logs.php on line 95. 1 SYSTEMPATH\Debug\Toolbar\Collectors\Logs.php(95): CodeIgniter\Debug\Exceptions->errorHandler(2, 'Undefined property: Monolog\\Logger::$logCache', 'C:\\Users\\christian.rumpf\\Documents\\GitHub\\valde-dettol\\htdocs\\vendor\\codeigniter4\\framework\\system\\Debug\\Toolbar\\Collectors\\Logs.php', 95) 2 SYSTEMPATH\Debug\Toolbar\Collectors\Logs.php(60): CodeIgniter\Debug\Toolbar\Collectors\Logs->collectLogs() 3 SYSTEMPATH\Debug\Toolbar\Collectors\BaseCollector.php(228): CodeIgniter\Debug\Toolbar\Collectors\Logs->display() 4 SYSTEMPATH\Debug\Toolbar.php(95): CodeIgniter\Debug\Toolbar\Collectors\BaseCollector->getAsArray() 5 SYSTEMPATH\Debug\Toolbar.php(390): CodeIgniter\Debug\Toolbar->run(1778141697.83611, 0.7603, Object(CodeIgniter\HTTP\IncomingRequest), Object(CodeIgniter\HTTP\Response)) 6 SYSTEMPATH\Filters\DebugToolbar.php(44): CodeIgniter\Debug\Toolbar->prepare(Object(CodeIgniter\HTTP\IncomingRequest), Object(CodeIgniter\HTTP\Response)) 7 SYSTEMPATH\Filters\Filters.php(278): CodeIgniter\Filters\DebugToolbar->after(Object(CodeIgniter\HTTP\IncomingRequest), Object(CodeIgniter\HTTP\Response), null) 8 SYSTEMPATH\Filters\Filters.php(225): CodeIgniter\Filters\Filters->runAfter([...]) 9 SYSTEMPATH\CodeIgniter.php(525): CodeIgniter\Filters\Filters->run('dashboard/deliveries/index/false', 'after') 10 SYSTEMPATH\CodeIgniter.php(354): CodeIgniter\CodeIgniter->handleRequest(null, Object(Config\Cache), false) 11 SYSTEMPATH\Boot.php(363): CodeIgniter\CodeIgniter->run() 12 SYSTEMPATH\Boot.php(68): CodeIgniter\Boot::runCodeIgniter(Object(CodeIgniter\CodeIgniter)) 13 FCPATH\index.php(59): CodeIgniter\Boot::bootWeb(Object(Config\Paths)) {"message":"Undefined property: Monolog\\Logger::$logCache","routeInfo":"[Method: GET, Route: dashboard/deliveries/index/false]","exFile":"SYSTEMPATH\\Debug\\Toolbar\\Collectors\\Logs.php","exLine":95,"trace":" 1 SYSTEMPATH\\Debug\\Toolbar\\Collectors\\Logs.php(95): CodeIgniter\\Debug\\Exceptions->errorHandler(2, 'Undefined property: Monolog\\\\Logger::$logCache', 'C:\\\\Users\\\\christian.rumpf\\\\Documents\\\\GitHub\\\\valde-dettol\\\\htdocs\\\\vendor\\\\codeigniter4\\\\framework\\\\system\\\\Debug\\\\Toolbar\\\\Collectors\\\\Logs.php', 95)\n 2 SYSTEMPATH\\Debug\\Toolbar\\Collectors\\Logs.php(60): CodeIgniter\\Debug\\Toolbar\\Collectors\\Logs->collectLogs()\n 3 SYSTEMPATH\\Debug\\Toolbar\\Collectors\\BaseCollector.php(228): CodeIgniter\\Debug\\Toolbar\\Collectors\\Logs->display()\n 4 SYSTEMPATH\\Debug\\Toolbar.php(95): CodeIgniter\\Debug\\Toolbar\\Collectors\\BaseCollector->getAsArray()\n 5 SYSTEMPATH\\Debug\\Toolbar.php(390): CodeIgniter\\Debug\\Toolbar->run(1778141697.83611, 0.7603, Object(CodeIgniter\\HTTP\\IncomingRequest), Object(CodeIgniter\\HTTP\\Response))\n 6 SYSTEMPATH\\Filters\\DebugToolbar.php(44): CodeIgniter\\Debug\\Toolbar->prepare(Object(CodeIgniter\\HTTP\\IncomingRequest), Object(CodeIgniter\\HTTP\\Response))\n 7 SYSTEMPATH\\Filters\\Filters.php(278): CodeIgniter\\Filters\\DebugToolbar->after(Object(CodeIgniter\\HTTP\\IncomingRequest), Object(CodeIgniter\\HTTP\\Response), null)\n 8 SYSTEMPATH\\Filters\\Filters.php(225): CodeIgniter\\Filters\\Filters->runAfter([...])\n 9 SYSTEMPATH\\CodeIgniter.php(525): CodeIgniter\\Filters\\Filters->run('dashboard/deliveries/index/false', 'after')\n10 SYSTEMPATH\\CodeIgniter.php(354): CodeIgniter\\CodeIgniter->handleRequest(null, Object(Config\\Cache), false)\n11 SYSTEMPATH\\Boot.php(363): CodeIgniter\\CodeIgniter->run()\n12 SYSTEMPATH\\Boot.php(68): CodeIgniter\\Boot::runCodeIgniter(Object(CodeIgniter\\CodeIgniter))\n13 FCPATH\\index.php(59): CodeIgniter\\Boot::bootWeb(Object(Config\\Paths))"} []
PHP Version
8.2
CodeIgniter4 Version
4.6.5
CodeIgniter4 Installation Method
Composer (using
codeigniter4/appstarter)Which operating systems have you tested for this bug?
Linux, Windows
Which server did you use?
apache
Environment
development
Database
No response
What happened?
We replaced CI4 Logger with Monolog Logger (3.9.0) for its flexibility (mostly so that we can log in console and in ECS format).
We recently updated the CI version from 4.6.3 to 4.6.5. When running the application in "development" environment, we encountered the following error messages:
Steps to Reproduce
We followed the guidelines in Using Third-Party Loggers to create our own logger service.
This setup would create an error of the Logs collector is enabled in
Config\Toolbar. Disabling it works fineExpected Output
I'm not sure if the Logs collector should work with 3rd-party PSR-3 Loggers or not, but if not, maybe a check would be nice if
Logger->logCacheactually exists.We expect that there are no issues with the DebugToolbar if support for 3rd-party loggers is possible.
Anything else?
I think the problem already occurred first since version 4.6.4, though not tested yet.
Above's code example created the following log lines in
writable/logs/app.log(except for the Route and Filter parameter parts).