Jak nastavit logování chyb v config.neon
- Allconius
- Člen | 317
Ahoj jak nastavím v config.neon aby se mi logovaly chyby např.:
Nette\Application\BadRequestException #404
No route for HTTP request.
v config.neon mám:
<?php
tracy:
logSeverity: E_ALL
?>
ale při chybě se mi v adresáři /log(777) nevytvoří soubor error.log, mám tam jen výchozí .gitignore a .htaccess
- Roman Halaxa
- Člen | 60
Trochu debilní otázka, ale jsi si jistý že se koukáš do složky log ? Tam totiž žádný .htacess a .gitignore základní není pokud vím. Ten je v webrootu. Možná plácám kraviny ale snažím se pomoc :D
- Allconius
- Člen | 317
Ahoj, vpoho, mám strukturu klasicky:
/app
/log
/temp
/vendor
/www
ten .htaccess tam mám protože automaticky směruju do té složky www, tj.
v rootu mám .htaccess:
<?php
Allow from all
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ www/ [L]
RewriteRule (.*) www/$1 [L]
</IfModule>
?>
a v tom /log je pak .htaccess:
<?php
Order Allow,Deny
Deny from all
?>
myslíš že může být problém kvůli tomu směrování do www ? Ještě mě napadlo tam zadat nějaký jiný adresář pro ten log, vbootstrap mám:
<?php
$configurator->enableTracy(__DIR__ . '/../log');
?>
ale mám tam i :
<?php
$configurator->setTempDirectory(__DIR__ . '/../temp');
?>
a to funguje bez problému, tak předpokládám že ‚/../log‘ je správně …
- kalatalabnik
- Člen | 35
Jedeš v produkčním režimu? Tzn. Laděnku nevidíš?
Máš to na Linuxu? Kdo je vlastník adresáře log?
Když zkusíš Debugger::log(“msg”), objeví se soubor v log
adresáři?
- Martk
- Člen | 661
„Chyby“ 4xx se v nette nelogují. Odkomentuj tohle: https://github.com/…resenter.php#L35
Editoval Martk (28. 2. 2019 9:11)
- Allconius
- Člen | 317
Martk napsal(a):
„Chyby“ 4xx se v nette nelogují. Odkomentuj tohle: https://github.com/…resenter.php#L35
Ahoj, mám jinou verzi:
<?php
namespace App\Presenters;
use Nette;
use Nette\Application\Responses;
use Nette\Http;
use Tracy\ILogger;
class ErrorPresenter implements Nette\Application\IPresenter
{
use Nette\SmartObject;
/** @var ILogger */
private $logger;
public function __construct(ILogger $logger)
{
$this->logger = $logger;
}
public function run(Nette\Application\Request $request)
{
$exception = $request->getParameter('exception');
if ($exception instanceof Nette\Application\BadRequestException) {
list($module, , $sep) = Nette\Application\Helpers::splitName($request->getPresenterName());
return new Responses\ForwardResponse($request->setPresenterName($module . $sep . 'Error4xx'));
}
$this->logger->log($exception, ILogger::EXCEPTION);
return new Responses\CallbackResponse(function (Http\IRequest $httpRequest, Http\IResponse $httpResponse) {
if (preg_match('#^text/html(?:;|$)#', $httpResponse->getHeader('Content-Type'))) {
require __DIR__ . '/templates/Error/500.phtml';
}
});
}
}
?>
- Allconius
- Člen | 317
kalatalabnik napsal(a):
Jedeš v produkčním režimu? Tzn. Laděnku nevidíš?
Máš to na Linuxu? Kdo je vlastník adresáře log?
Když zkusíš Debugger::log(“msg”), objeví se soubor v log adresáři?
Ahoj, Tracy vidím, je to na linuxu, Debugger::log(„msg“) mi vyhodí hlášku:
Error
Class ‚App\Presenters\Debugger‘ not found
- Martk
- Člen | 661
Tak přidej tam ten řádek:
$this->logger->log("HTTP code {$e->getCode()}: {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", 'access');
list($module, , $sep) = Nette\Application\Helpers::splitName($request->getPresenterName());
return new Responses\ForwardResponse($request->setPresenterName($module . $sep . 'Error4xx'));
bude se ti to logovat do access.log
PS: nedával bych to do error.log, protože tohle není chyba
- Allconius
- Člen | 317
Martk napsal(a):
Tak přidej tam ten řádek:
$this->logger->log("HTTP code {$e->getCode()}: {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", 'access'); list($module, , $sep) = Nette\Application\Helpers::splitName($request->getPresenterName()); return new Responses\ForwardResponse($request->setPresenterName($module . $sep . 'Error4xx'));
bude se ti to logovat do access.log
PS: nedával bych to do error.log, protože tohle není chyba
tak jsem nakonec upravil jen ten Error4xxPresenter :
<?php
namespace App\Presenters;
use Nette;
use Tracy\Debugger;
class Error4xxPresenter extends Nette\Application\UI\Presenter
{
public function startup()
{
parent::startup();
if (!$this->getRequest()->isMethod(Nette\Application\Request::FORWARD)) {
$this->error();
}
}
public function renderDefault(Nette\Application\BadRequestException $exception)
{
// load template 403.latte or 404.latte or ... 4xx.latte
$message = 'Error '.$exception->getCode().' - User '.$_SERVER['REMOTE_ADDR'].' try hack page at '.date("d. m. Y H:i:s");
Debugger::log($message);
$file = __DIR__ . "/templates/Error/{$exception->getCode()}.latte";
$this->template->setFile(is_file($file) ? $file : __DIR__ . '/templates/Error/4xx.latte');
}
}
?>
4XX ukládá do /log/info.log takto mi to stačí, díky moc všem za
pomoc
500 chyba se uloží do /log/exception.log