Přidání IP adresy uživatele do logu při chybě

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
roman.campula
Člen | 60
+
0
-

Zdravím,
řeším problém, jak přidat do automaticky tvořených chybových logů (error.log, exception.log) IP adresu uživatele, pravděpodobně z

$_SERVER['REMOTE_ADDR']

Jak to ale udělat? Snažil jsem se v BasePresenteru přetížit metodu Tracy\Debugger::log, ale nějak se to nepodařilo. Nevím, jak na to. Připadá mi to jako jedna ze základních věcí, co by měla v logu být.

petr.jirous
Člen | 128
+
0
-

Co takhle si to přidat přímo do hlášky v ErrorPresenteru?
V sandboxu je něco takového:

Debugger::log("HTTP code $code: {$exception->getMessage()} in {$exception->getFile()}:{$exception->getLine()}", 'access');

tak tam tu ip prostě někam přidáš

Debugger::log("[{$_SERVER['REMOTE_ADDR']}] - HTTP code $code: {$exception->getMessage()} in {$exception->getFile()}:{$exception->getLine()}", 'access');
roman.campula
Člen | 60
+
0
-

Děkuji za nápad, nedošlo mi, že to jde přes ErrorPresenter. Nicméně to funguje pouze na logy „error“ a „access“, ale v případě, že PHP vyhodí výjimku, tak ne. V logu exception.log lze text logovací zprávy také změnit?

petr.jirous
Člen | 128
+
0
-

exceptiony se tam také logují… nicméně ten log je složitější, protože se tam přidává celý objekt s Exceptionou… nejjednodušší bude do logu s exceptionou přidat před nebo za zalogování výjimky další log s IP adresou. Např.:

Debugger::log($exception, Debugger::EXCEPTION); // and log exception
Debugger::log("IP: {$_SERVER['REMOTE_ADDR']}", Debugger::EXCEPTION);

Editoval petr.jirous (26. 11. 2014 10:34)

Mysteria
Člen | 797
+
0
-

Osobně mám přepsanou část logovací metody v souboru Debugger.php:

self::getLogger()->log(array(
	@date('[Y-m-d H-i-s]') . ($ip && $host ? " [$ip - $host]" : ''),
	trim($message),
	self::$source ? ' @  ' . self::$source : NULL,
	$exceptionFilename ? ' @@  ' . basename($exceptionFilename) : NULL
), $priority);

Správě by se to mělo podědit a přepsat to v potomku, ale protože jak často upgraduju Nette, tak jsem to vyřešil takhle jednoduše.