Nyní se podíváme na Nette Logger - jak nastavit vlastní název logovacího souboru.
Klasické logování v Nette pomocí \Tracy\Debugger::log se provádí to souboru log/error.log atd => tzn. dle levelu např. ILogger::ERROR:
\Tracy\Debugger::log($e->getMessage(), ILogger::ERROR);
Když totiž uděláme
\Tracy\Debugger::log($e->getMessage(), 'myFileName');
Tak se nám zpráva uloží beztak do error.log a nikoliv do myFileName.log
Jak na logování do vlastního souboru myFileName.log
V kódu níže specifikujeme, že chceme logovat do souboru log/myFileName.log
$logger = new \Tracy\Logger(Debugger::$logDirectory);
$logger->log('text for log', 'myFileName');
Příklad s typickým použitím v try - catch
try {
// vyvoláme vyjímku
throw new \Exception('Nastala vyjímka XYZ');
}
catch (\Exception $e)
{
// zalogujeme chybu do vlastního log souboru
$logger = new \Tracy\Logger(Debugger::$logDirectory);
$logger->log($e->getMessage(), 'myFileName');
}
potřebuji zprovoznit projekt v nette na hostingu, kde nemůžu změnit document root.
Document root je / ale já mám index v /www/index.php . Můžo to nějak nastavit přes soubor .htaccess?
Díky
uprav si document root pomocí htaccess pro nette takto:
/.htaccess (v rootu nette)
------------------------------
< IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ /www/$1 [NE]
< /IfModule>
/www/.htaccess (veřejně dostupný adresář www)
------------------------------
< IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /www/
RewriteRule /\.|^\.(?!well-known/) - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
< /IfModule>
udělal jsem si metodu na promazání tempu nette:
public function handleDeleteTemp(): void
{
$cacheDir = __DIR__ . '/../../../temp/cache';
if (file_exists($cacheDir))
{
$files = scandir($cacheDir);
foreach($files as $file)
{
if (!in_array($file,['.','..']))
{
$dirTemp = $cacheDir."/".$file;
array_map('unlink', glob("$dirTemp/*.*"));
rmdir($dirTemp);
}
}
}
$this->redirect(":default");
}
Tato metoda funguje, ale jakmile se jedná o více podadresářů, tak to nefunguje. Uměl by to někdo přes rekurzi? Díky
já bych to promazávání Nette tempu udělal rekurzivně takto a mám ověřeno, že to funguje:
/**
* Promazat temp cache rekurzivně
* @return void
*/
public function handleDeleteTemp($dirPath = __DIR__ . '/../../../temp/cache'): void
{
$files = glob($dirPath . '/*');
foreach ($files as $file)
{
if (is_dir($file))
{
$this->handleDeleteTemp($file);
}
else
{
unlink($file);
}
}
rmdir($dirPath);
}