Oznámení
Logovanie vsetkych SQL prikazov (aj pre transakciu)
před 8 lety
- MIKI
- Člen | 34
Zdravim,
Po asi polhodine som nasiel problem, a chcem sa spytat, preco je DibiProfiler takto (podla mojho nazoru) zle rieseny.
Je mozne nastavit Filter pre DibiProfiler, defaultne to je
<?php
/** @var int */
private $filter = self::ALL;
?>
Ako som pozeral, tak to znamena logovanie VSETKYCH typov dotazov.
ALE!
metoda DibiProfiler::after() sa sprava inak
<?php
// ocakavane spravanie, vyfiltruje co nechceme
if (($event & $this->filter) === 0) return;
// nesledoval som, o co presne ide, ale ocakavam, ze nieco specialne pre QUERY, OK
if ($event & self::QUERY) {
...
// taktiez vcelku ocakavana podmienka
if ($this->file) {
$this->writeFile(
...
}
} // ~ tu je koniec podmienky (if QUERY)
}// ~ tu je koniec funkcie after()
?>
Preco sa podmienka if(file) nachadza tak skoro? Ak sa pre QUERY zapisuje nieco specialne, tak OK, potom ale otazka znie, preco sa nezapisuju ostatne prikazy (BEGIN, COMMIT, ROLLBACK) ? Ak si to mozem vyfiltrovat (napr. nastavit defaultny filter na QUERY), nevidim dovod preco nelogovat aj ostatne prikazy.
Ja si to opravim pre svoju verziu dibi, co mi ale nedovoluje pouzivat najnovsie verzie, prip. mini verzie.
Podla mojho nazoru, by bolo vhodne toto opravit, alebo mi vysvetlite aktualny stav :)
před 8 lety
- Milo
- Nette Core | 1119
Pokud chceš nasazovat i následující verze, koukni na aktuální verzi na
GitHub. Tam už se DibiProfiler
nepoužívá, ale je nahrazen
$dibiConnection->onEvent
callbacky. Je to v jednom
z nejnovějších commitů. Starého chování logování do souboru
dosáhneš takto:
$config = array(
...
'profiler' => array(
'run' => true,
'file' => 'dibi.log',
),
...
);
Případně si teď snadno vytvoříš vlastní loger:
function dibiLogger(DibiEvent $event)
{
....
}
$db = new DibiConnection($config);
$db->onEvent[] = 'dibiLogger';
A k tomu, proč se neloguje BEGIN, COMMIT… Nevím to jistě, ale asi to
bude tím, že ne každý driver začíná/končí transakcí pomocí SQL kódu.
Třeba firebird používá ibase_trans()
.
před 8 lety
- MIKI
- Člen | 34
@Milo:
diky, GitHub nepozeram, stahujem len zip z tejto stranky, a dlho som ani nestahoval, netusil som, ze sa to este dako vyvija :)
Nuz, mne osobne ani tak neslo o to, aby som tam mal presny SQL dotaz, ale postacilo by „BEGIN TRANSACTION“ v logu.
Este raz diky, skusim pozriet ten DibiEvent :)