Jak nastavit logování chyb v config.neon

Allconius
Člen | 313
+
0
-

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
+
0
-

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 | 313
+
0
-

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
+
0
-

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 | 651
+
0
-

„Chyby“ 4×x se v nette nelogují. Odkomentuj tohle: https://github.com/…resenter.php#L35

Editoval Martk (28. 2. 2019 9:11)

Allconius
Člen | 313
+
0
-

Martk napsal(a):

„Chyby“ 4×x 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 | 313
+
0
-

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

Allconius
Člen | 313
+
0
-

pokud do presenteru přidám:
use Tracy\Debugger;

tak to loguje do /tmp/info.log, ale jak tam dostat ten /tmp/error.log ?

Editoval Allconius (28. 2. 2019 12:39)

Martk
Člen | 651
+
0
-

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 | 313
+
0
-

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 Error4×xPresenter :

<?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