Processor nefunguje pro info log – monolog
- Vojtech
- Člen | 5
Ahoj,
potřebuji si v logu vypisovat jméno uživatele, který vyvolal log. Chtěl
jsem na to jít přes processors a vytvořil jsem si třídu UserProcessor:
namespace App\Logging;
use Monolog\Processor\ProcessorInterface;
use Nette\Security\User;
class UserProcessor implements ProcessorInterface
{
private User $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function __invoke(array $record): array
{
bdump("ahoj"); // Tento bdump se vypíše i při info logu
$username = $this->user->isLoggedIn() ? $this->user->getIdentity()->getData()['username'] : 'guest';
$record['extra']['user'] = $username;
return $record;
}
}
v services.neon jsem si ji zaregistroval:
monolog:
channel:
default: # default channel is required
handlers:
- Monolog\Handler\RotatingFileHandler(%appDir%/../log/syslog.log, 30, Monolog\Logger::WARNING)
- Monolog\Handler\RotatingFileHandler(%appDir%/../log/info.log, 30, Monolog\Logger::INFO)
processors:
- @App\Logging\UserProcessor #Monolog\Processor\MemoryPeakUsageProcessor()
Ale uživatel se mi vypíše pouze při warning logu a výš:
$this->logger->info('Log that application did something');
[2025-01-27 15-30-26] Log that application did something @ http://whatever/admin/
$this->logger->critical("Log that application did something wrong");
[2025-01-27T15:30:26.206199+00:00] default.CRITICAL: Log that application did something wrong [] {"user":"admin"}
Nevíte proč se info log chová jinak? A jak dostat informaci o uživateli i do info logu?
Předem díky za odpověď (Omlouvám se pokud jsem přehlédl něco očividného)
- Marek Bartoš
- Nette Blogger | 1311
A po volání $this->user ti dump funguje? Mohla tam nastat exception a co se pak stane záleží na nastavení exception handleru v Monolog\Logger
- Vojtech
- Člen | 5
Jj, žádnou exceptionu to neháže. User se normálně propíše do bdumpu.
public function renderDefault(): void
{
$this->logger->info("Ahoj test");
$stop = $neexistuju; // zastav zde
public function __invoke(array $record): array
{
bdump($this->user, "invoke"); // Tento bdump se vypíše i při info logu
$username = $this->user->isLoggedIn() ? $this->user->getIdentity()->getData()['username'] : 'guest';
$record['extra']['user'] = $username;
return $record;
}
Výstup zůstane stejný:
[2025-01-27 16-58-22] Ahoj test @ http://