Diferență între revizuiri ale paginii „Tipuri de loguri”

De la dexonline wiki
Sari la navigare Sari la căutare
 
(Nu s-a afișat o versiune intermediară efectuată de același utilizator)
Linia 1: Linia 1:
''Dexonline'' folosește mai multe sisteme de logare. Nu este o situație ideală și am ajuns la ea prin mulți ani de peticire a sistemului, :-) dar cel puțin încercăm să documentăm tipurile de informație care se loghează și unde.
''Dexonline'' folosește mai multe sisteme de logare. Nu este o situație ideală și am ajuns la ea prin mulți ani de peticire a sistemului, :-) dar cel puțin încercăm să documentăm tipurile de informație care se loghează și unde.


== phplib/debugInfo.php și debugUser ==
== lib/debugInfo.php și debugUser ==


Biblioteca <tt>phplib/debugInfo.php</tt> oferă un mecanism pentru colectarea timpilor de rulare ai oricărei operații:
Biblioteca <tt>lib/debugInfo.php</tt> oferă un mecanism pentru colectarea timpilor de rulare ai oricărei operații:


* Funcția <tt>debug_init()</tt> este apelată automat din <tt>phplib/util.php</tt>.
* Funcția <tt>debug_init()</tt> este apelată automat din <tt>lib/util.php</tt>.
* Funcția <tt>debug_resetClock()</tt> trebuie apelată la începutul operației pe care doriți să o cronometrați.
* Funcția <tt>debug_resetClock()</tt> trebuie apelată la începutul operației pe care doriți să o cronometrați.
* Funcția <tt>debug_stopClock($message)</tt> trebuie apelată la sfârșitul operației. Ea adaugă mesajul dorit și timpul de rulare la un vector cu informații
* Funcția <tt>debug_stopClock($message)</tt> trebuie apelată la sfârșitul operației. Ea adaugă mesajul dorit și timpul de rulare la un vector cu informații
Linia 18: Linia 18:
0 ms: [SHOW COLUMNS FROM `Source`]
0 ms: [SHOW COLUMNS FROM `Source`]
1 ms: [select * from Source WHERE 1 order by isOfficial desc, displayOrder]
1 ms: [select * from Source WHERE 1 order by isOfficial desc, displayOrder]
3 ms: [select distinct L.* from InflectedForm I, Lexem L where I.lexemId = L.id and I.formNoAccent = 'remuladă' order by L.formNoAccent]
3 ms: [select distinct L.* from InflectedForm I, Lexem L where I.lexemeId = L.id and I.formNoAccent = 'remuladă' order by L.formNoAccent]
72 ms: [SHOW COLUMNS FROM `Lexem`]
72 ms: [SHOW COLUMNS FROM `Lexem`]
</pre>
</pre>
Linia 29: Linia 29:
Idiorm și Paris pot raporta fiecare query SQL pe care îl execută. Această informație poate fi deosebit de utilă în cazul în care aveți o greșeală de sintaxă într-o căutare. În această situație, comportamentul lui Idiorm poate fi misterios.
Idiorm și Paris pot raporta fiecare query SQL pe care îl execută. Această informație poate fi deosebit de utilă în cazul în care aveți o greșeală de sintaxă într-o căutare. În această situație, comportamentul lui Idiorm poate fi misterios.


Informațiile de depanare de la Idiorm sunt implicit dezactivate. Pentru a le activa, decomentați, la începutul fișierului <tt>phplib/db.php</tt>, linia <tt>ORM::configure('logging', true);</tt>. Apoi, puteți executa comenzi ca:
Informațiile de depanare de la Idiorm sunt implicit dezactivate. Pentru a le activa, decomentați, la începutul fișierului <tt>lib/db.php</tt>, linia <tt>ORM::configure('logging', true);</tt>. Apoi, puteți executa comenzi ca:


<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
Linia 45: Linia 45:
* <tt>logSampling</tt> indică ce fracțiune din căutări trebuie logate (0.00 - 1.00). Pe serverul principal, valoarea este 0.10. În mediul de dezvoltare, setați variabila la 1.00 pentru a loga toate căutările.
* <tt>logSampling</tt> indică ce fracțiune din căutări trebuie logate (0.00 - 1.00). Pe serverul principal, valoarea este 0.10. În mediul de dezvoltare, setați variabila la 1.00 pentru a loga toate căutările.


Clasa care se ocupă cu logarea este <tt>phplib/modelObjects.php:Log</tt>, funcția <tt>logData()</tt>. Formatul prezent al logului este o listă de valori delimitate prin <tt>\t</tt>. Acest format nu este perfect și va fi schimbat în viitor, deoarece nu se pretează la modificări.
Clasa care se ocupă cu logarea este <tt>lib/modelObjects.php:Log</tt>, funcția <tt>logData()</tt>. Formatul prezent al logului este o listă de valori delimitate prin <tt>\t</tt>. Acest format nu este perfect și va fi schimbat în viitor, deoarece nu se pretează la modificări.


Informațiile colectate în prezent sunt:
Informațiile colectate în prezent sunt:
Linia 51: Linia 51:
* Cuvântul cu care am răspuns la căutare: ''oprobriu''.
* Cuvântul cu care am răspuns la căutare: ''oprobriu''.
* Cuvântul introdus de utilizator, dacă diferă de primul (dacă a avut loc o redirectare): ''oprobiu''.
* Cuvântul introdus de utilizator, dacă diferă de primul (dacă a avut loc o redirectare): ''oprobiu''.
* Tipul căutării, conform constantelor <tt>SEARCH_*</tt> definite în <tt>phplib/util.php</tt>.
* Tipul căutării, conform constantelor <tt>SEARCH_*</tt> definite în <tt>lib/util.php</tt>.
* Dacă utilizatorul este înregistrat sau anonim.
* Dacă utilizatorul este înregistrat sau anonim.
* Designul (skinul) folosit: ''zepu, polar, mobile'' etc.
* Designul (skinul) folosit: ''zepu, polar, mobile'' etc.
Linia 87: Linia 87:
== Loguri vechi ==
== Loguri vechi ==


Primul sistem de logare al ''dexonline'' a fost scris de la zero și nu prea deștept. Vezi <tt>phplib/logging.php</tt>. El mai este folosit și astăzi.
Primul sistem de logare al ''dexonline'' a fost scris de la zero și nu prea deștept. Vezi <tt>lib/logging.php</tt>. El mai este folosit și astăzi.


* <tt>log/userlog</tt> loghează conectările / deconectările utilizatorilor și editările de definiții și de lexeme.
* <tt>log/userlog</tt> loghează conectările / deconectările utilizatorilor și editările de definiții și de lexeme.

Versiunea curentă din 4 februarie 2019 15:16

Dexonline folosește mai multe sisteme de logare. Nu este o situație ideală și am ajuns la ea prin mulți ani de peticire a sistemului, :-) dar cel puțin încercăm să documentăm tipurile de informație care se loghează și unde.

lib/debugInfo.php și debugUser

Biblioteca lib/debugInfo.php oferă un mecanism pentru colectarea timpilor de rulare ai oricărei operații:

  • Funcția debug_init() este apelată automat din lib/util.php.
  • Funcția debug_resetClock() trebuie apelată la începutul operației pe care doriți să o cronometrați.
  • Funcția debug_stopClock($message) trebuie apelată la sfârșitul operației. Ea adaugă mesajul dorit și timpul de rulare la un vector cu informații
  • Funcția debug_getDebugInfoAsHtml() întoarce un șir HTML, gata de a fi tipărit pe ecran, cu informațiile colectate.

În final, informațiile colectate arată astfel:

Pagină generată în 163 ms.
24 ms: [SHOW COLUMNS FROM `User`]
2 ms: [select * from User WHERE id = 1]
0 ms: [SHOW COLUMNS FROM `Source`]
1 ms: [select * from Source WHERE 1 order by isOfficial desc, displayOrder]
3 ms: [select distinct L.* from InflectedForm I, Lexem L where I.lexemeId = L.id and I.formNoAccent = 'remuladă' order by L.formNoAccent]
72 ms: [SHOW COLUMNS FROM `Lexem`]

Una dintre variabilele definite în dex.conf este debugUser. Când utilizatorul definit de debugUser este conectat, el va primi automat, la sfârșitul fiecărei pagini, informațiile de depanare colectate mai sus. În prezent, colectăm numai informațiile despre timpii de execuție ai căutărilor MySQL.


Idiorm

Idiorm și Paris pot raporta fiecare query SQL pe care îl execută. Această informație poate fi deosebit de utilă în cazul în care aveți o greșeală de sintaxă într-o căutare. În această situație, comportamentul lui Idiorm poate fi misterios.

Informațiile de depanare de la Idiorm sunt implicit dezactivate. Pentru a le activa, decomentați, la începutul fișierului lib/db.php, linia ORM::configure('logging', true);. Apoi, puteți executa comenzi ca:

var_dump(ORM::get_query_log());
var_dump(ORM::get_last_query());

Query log

Căutările efectuate sunt logate împreună cu câteva informații de interes. Parametrii acestui log sunt setați în dex.conf:

  • logSearch indică dacă sistemul de logare este activ (0/1)
  • logPath indică numele fișierului log cu calea completă (/var/log/dex-query.log)
  • logResults indică câte rezultate trebuie logate pentru fiecare căutare. Vor fi afișate cel mult logResults ID-uri ale definițiilor întoarse ca rezultat.
  • logSampling indică ce fracțiune din căutări trebuie logate (0.00 - 1.00). Pe serverul principal, valoarea este 0.10. În mediul de dezvoltare, setați variabila la 1.00 pentru a loga toate căutările.

Clasa care se ocupă cu logarea este lib/modelObjects.php:Log, funcția logData(). Formatul prezent al logului este o listă de valori delimitate prin \t. Acest format nu este perfect și va fi schimbat în viitor, deoarece nu se pretează la modificări.

Informațiile colectate în prezent sunt:

  • Cuvântul cu care am răspuns la căutare: oprobriu.
  • Cuvântul introdus de utilizator, dacă diferă de primul (dacă a avut loc o redirectare): oprobiu.
  • Tipul căutării, conform constantelor SEARCH_* definite în lib/util.php.
  • Dacă utilizatorul este înregistrat sau anonim.
  • Designul (skinul) folosit: zepu, polar, mobile etc.
  • Preferințele utilizatorului, dacă sunt diferite de cele implicite.
  • Numărul de rezultate. Este vorba despre definiții. Căutările cu expresii regulate și cele aproximative, care întorc o listă de lexeme, vor lista 0 aici.
  • Lista de rezultate (definitionId), în limita parametrului logResults definit mai sus.
  • Dacă a avut loc o redirectare automată, de exemplu oprobiu -> oprobriu (greșeală de tipar) sau munceam -> munci (trimitere la forma de bază).
  • Data căutării.
  • Durata totală a scriptului, în milisecunde.

Rotirea query logului se face prin logrotate, conform parametrilor din /etc/logrotate.d/dexonline, în prezent cu conținutul:

/var/log/dex-query.log {
    weekly
    rotate 400
    missingok
    compress
}


Loguri de sistem

Ca de obicei, MySQL și Apache HTTP loghează informații în locurile obișnuite, în /var/log. Acestea pot fi utile. În special, vă recomandăm să colectați informații despre căutările lente din MySQL. În fișierul de configurare al serverului MySQL (de obicei /etc/mysql/my.cnf) puteți defini variabilele:

[mysqld]
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2

Aceasta va loga toate căutările care durează peste două secunde. Pe un sistem de dezvoltare, fără loadul din producție, acesta este un indiciu bun pentru un query neperformant.

Loguri vechi

Primul sistem de logare al dexonline a fost scris de la zero și nu prea deștept. Vezi lib/logging.php. El mai este folosit și astăzi.

  • log/userlog loghează conectările / deconectările utilizatorilor și editările de definiții și de lexeme.
  • log/scriptlog loghează activitatea scripturilor din directorul tools/, din care multe rulează noaptea ca cron joburi.
  • log/dictlog loghează căutările efectuate prin protocolul DICT pe portul 2628.

Toate aceste loguri ar trebui unificate și mutate într-un director standard, cum ar fi /var/log/dexonline.