Rôzne úrovne protokolovania v režime dlhodobého spánku

1. Prehľad

Pretože Hibernate pre nás zabezpečuje interakciu s databázou, sme schopní rýchlo vyvinúť kód súvisiaci s databázou. To však môže sťažiť ladenie chýb súvisiacich s databázou.

Preto môže byť užitočné zobraziť interakciu režimu dlhodobého spánku s databázou. Napríklad SQL vygenerovaný režimom dlhodobého spánku na čítanie údajov z tabuľky.

V tomto tutoriáli uvidíme rôzne úrovne prihlásenia do režimu dlhodobého spánku, ktoré je možné na tento účel použiť.

2. Logovanie SQL

Na najzákladnejšej úrovni môžeme protokolovať príkazy SQL vygenerované režimom dlhodobého spánku bez toho, aby mu boli odovzdané skutočné hodnoty parametrov.

Hibernácia používa túto kategóriu org.hibernate.SQL tieto informácie prihlásiť. Všetko, čo musíme urobiť, je nastaviť úroveň protokolovania tejto kategórie na DEBUG.

V Log4J budeme musieť pridať a drevorubač prvok v konfiguračnom XML:

Podobne v Log4J2 pridáme a Logger element:

A v aplikácii Logback pridáme a drevorubač element:

Teraz by sme mali vidieť vygenerovaný SQL v protokoloch:

2019-12-07 23:04:23 | DEBUG | [main] o.h.SQL: 127 - vložte do hodnoty Employee (employeeNumber, name, title, id) hodnoty (?,?,?,?) 2019-12-07 23:04:23 | DEBUG | [main] o.h.SQL: 127 - vyberte zamestnanca0_.id ako id1_0_, zamestnanca0_.employeeNumber ako zamestnanca2_0_, zamestnanca0_.názvu ako meno3_0_, zamestnanca0_.názvu ako title4_0_ zo zamestnanca zamestnanca0_

3. Protokolovanie hodnôt parametrov

Aj keď bežne je vygenerovaný SQL dostatočný na identifikáciu problémov, niekedy si možno budeme chcieť pozrieť aj parametre odovzdávané príkazu SQL.

Režim dlhodobého spánku zaznamenáva vstupné parametre a získané výsledky pomocou org.hibernate.type.descriptor.sql kategória s úrovňou denníka TRACE. Teraz pridajme túto kategóriu do našich konfiguračných súborov.

V Log4J robíme:

V Log4J2:

A nakoniec, v aplikácii Logback:

V dôsledku toho by sme mali vidieť hodnoty parametrov odovzdané príkazu SQL, ako aj výsledok vykonania:

2019-12-07 23:04:23 | DEBUG | [main] o.h.SQL: 127 - vložte do hodnoty Employee (employeeNumber, name, title, id) hodnoty (?,?,?,?) 2019-12-07 23:04:23 | TRACE | [main] o.h.t.d.s.BasicBinder: 64 - parameter väzby [1] ako [VARCHAR] - [001] 2019-12-07 23:04:23 | TRACE | [main] o.h.t.d.s.BasicBinder: 64 - parameter väzby [2] ako [VARCHAR] - [John Smith] 2019-12-07 23:04:23 | TRACE | [main] o.h.t.d.s.BasicBinder: 52 - parameter väzby [3] ako [VARCHAR] - [null] 2019-12-07 23:04:23 | TRACE | [main] o.h.t.d.s.BasicBinder: 64 - parameter väzby [4] ako [BIGINT] - [1] 2019-12-07 23:04:23 | DEBUG | [main] o.h.SQL: 127 - vyberte zamestnanca0_.id ako id1_0_, zamestnanca0_.employeeNumber ako zamestnanca2_0_, zamestnanca0_.názvu ako meno3_0_, zamestnanca0_.titulu ako title4_0_ zo zamestnanca zamestnanca0_ 07.12.2019 23:04:23 | TRACE | [main] o.h.t.d.s. BasicExtractor: 60 - extrahovaná hodnota ([id1_0_]: [BIGINT]) - [1] 2019-12-07 23:04:23 | TRACE | [main] o.h.t.d.s. BasicExtractor: 60 - extrahovaná hodnota ([employee2_0_]: [VARCHAR]) - [001] 07.12.2019 23:04:23 | TRACE | [main] o.h.t.d.s. BasicExtractor: 60 - extrahovaná hodnota ([name3_0_]: [VARCHAR]) - [John Smith] 07.12.2019 23:04:23 | TRACE | [main] o.h.t.d.s. BasicExtractor: 50 - extrahovaná hodnota ([title4_0_]: [VARCHAR]) - [null]

Stojí za zmienku, že nemusíme aktivovať org.hibernate.SQL kategórie pre zobrazenie vyššie uvedených informácií. Tieto dve kategórie môžeme povoliť a zakázať nezávisle.

Ale, má zmysel umožniť org.hibernate.SQL aby sme vedeli, ktorého príkazu SQL sa hodnoty parametrov týkajú.

4. Aktivujte štatistiku dlhodobého spánku

Okrem hodnôt parametrov SQL a JDBC môže program Hibernate tiež zaznamenávať štatistické údaje pre každý príkaz SQL. To môže byť užitočné na identifikáciu potenciálnych problémov s výkonom.

Hibernácia používa túto kategóriu org.hibernate.stat tieto informácie prihlásiť. Hibernate ale nie vždy generuje tieto štatistiky, pretože môže mať zlý vplyv na výkon.

Najprv, musíme Hibernate povedať, aby tieto štatistiky generoval nastavením vlastnosti konfigurácie hibernate.generate_statistics do pravda.

Túto vlastnosť môžeme napríklad nastaviť v našom hibernate.cfg.xml spis:

pravda

Spolu s týmto majetkom nastavenie kategórie org.hibernate.stat do DEBUG zaznamená protokol so štatistikami pre každý vykonaný dopyt. Na konci relácie tiež zaznamená jeden viacriadkový výpis z denníka, ktorý bude obsahovať súhrnné štatistické informácie:

2019-12-07 23:25:18 | DEBUG | [main] o.h.s.i.StatisticsInitiator: 101 - Štatistiky boli inicializované [enabled = true] 2019-12-07 23:25:19 | DEBUG | [main] o.h.s.i.StatisticsImpl: 729 - HHH000117: HQL: from com.baeldung.hibernate.logging.Employee, čas: 22ms, riadky: 1 2019-12-07 23:25:19 | INFO | [main] o.h.e.i.StatisticalLoggingSessionEventListener: 258 - Metriky relácie {55 600 nanosekúnd strávených získaním 1 spojenia JDBC; 178600 nanosekúnd strávených pri uvoľnení 1 spojenia JDBC; 2167200 nanosekúnd strávených prípravou 2 výpisov JDBC; 2426800 nanosekúnd strávených vykonaním 2 výpisov JDBC; 0 nanosekúnd strávených vykonaním 0 dávok JDBC; 0 nanosekúnd strávených vykonaním 0 vložení L2C; 0 nanosekúnd strávených vykonaním 0 zásahov L2C; 0 nanosekúnd strávených vykonaním 0 zmeškaní L2C; 47098900 nanosekúnd strávených vykonaním 1 vyprázdnení (vyprázdnenie celkom 1 entít a 0 zbierok); 0 nanosekúnd strávených vykonaním 0 čiastočných spláchnutí (vyprázdnenie celkom 0 entít a 0 zbierok)}

Všimnite si prvý riadok v denníku, ktorý označuje, že štatistika je povolená.

5. Zaznamenajte celú aktivitu

Kopať ešte hlbšie do interakcie režimu dlhodobého spánku s databázou, budeme musieť povoliť prihlásenie pre danú kategóriu org.hibernovať. Táto kategória obsahuje všetky správy zaznamenané režimom dlhodobého spánku.

Túto kategóriu však musíme používať opatrne, pretože by mohla vytvoriť veľa výstupov protokolu:

6. Záver

V tomto tutoriáli sme videli rôzne úrovne prihlásenia do režimu dlhodobého spánku. Zaznamenané informácie môžu byť počas vývoja veľmi užitočné. Musíme však byť opatrní, kým to vo výrobe povoľujeme, pretože to môže nepriaznivo ovplyvniť výkon aplikácie.

A samozrejme, kód, ktorý je sprievodcom tohto tutoriálu, nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found