Zacal jsem vyvoj na mem novem webovem 'jadre' a udelal jsem tam i mj. logovaci mechanizmus. Ten se na konci parsovani zapise do souboru.
Inu, register_shutdown_function mi nesezere nestaticky metody v tride. Tak jsem udelal jednu zvlastni obycejnou funkci:
Kód: Vybrat vše
function shutdown() {
global $page, $mysql;
$mysql->terminate();
$page->terminate();
}
Samo ze nejaky 'debugging' nepomohl - vzdy se vypsalo to, co bylo jako obsah logu, spravne, jak melo. (
Kód: Vybrat vše
function terminate() {
$this->add('Ending log at ' . time() . ' (' . date('d.m.Y H:i:s') . ')');
$out = '';
foreach($this->lines as $line) {
$out .= $line . "\n";
}
file_put_contents('./logs/' . time() . '_' . rand(0, 300) . '.log', $out);
echo './logs/' . time() . '_' . rand(0, 300) . '.log', $out;
}
Po 45ti minutach jsem prisel na to, ze kdyz je nejaka funkce volana automaticky pres ten register_shutdown_function a zapisuje se z ni do souboru (file_put_contents, fopen & fwrite & fclose) tak se proste nic nestane, ani zadna chybova hlaska, proste nic.
Napadlo me pouzit ve tridach __destruct().. Ale co se nestalo! Ten samy vysledek jako pri register_shutdown_function()!
neco jsem o tom nasel na php.net ale to je 3 roky stare.. Podival jsem se do Server Rootu (ne document rootu) a opravdu tam byly vsechny logovaci soubory!
resenim je tedy:
Kód: Vybrat vše
file_put_contents(dirname(__FILE__) . '/logs/' . time() . '_' . rand(0, 300) . '.log', $out);
