Különböző naplózási szintek hibernált állapotban

1. Áttekintés

Mivel a Hibernate kezeli az interakciót az adatbázissal számunkra, képesek vagyunk gyorsan fejleszteni az adatbázishoz kapcsolódó kódot. De ez megnehezítheti az adatbázis-hibák hibakeresését.

Ezért hasznos lehet megnézni a Hibernate és az adatbázis kölcsönhatását. Például a Hibernate által generált SQL, hogy adatokat olvasson egy táblából.

Ebben az oktatóanyagban megnézzük a hibernált állapotban a naplózás különböző szintjeit, amelyek felhasználhatók ennek elérésére.

2. Az SQL naplózása

A legalapvetőbb szinten a Hibernate által generált SQL utasításokat naplózhatjuk a tényleges paraméterértékek nélkül.

A hibernálás a kategóriát használja org.hibernate.SQL hogy naplózza ezeket az információkat. Tehát csak annyit kell tennünk, hogy a kategória naplózási szintjét beállítjuk HIBÁK.

A Log4J-ben hozzá kell adnunk a naplózó elem a konfigurációs XML-ben:

Hasonlóképpen a Log4J2-ben hozzáadunk egy a-t Logger elem:

És a Logback-ben hozzáadunk egy naplózó elem:

Most látnunk kell a létrehozott SQL-t a naplókban:

2019-12-07 23:04:23 | HIBÁK | [main] o.h.SQL: 127 - beszúrás az Employee (workerNumber, név, beosztás, id) értékekbe (?,?,?,?) 2019-12-07 23:04:23 | HIBÁK | [main] o.h.SQL: 127 - válassza az alkalmazott0_.id nevet id1_0_, alkalmazott0_.employeeNumber mint alkalmazott2_0_, alkalmazott0_.név név3_0_, alkalmazott0_.title címet4_0_

3. Paraméterértékek naplózása

Bár általában az előállított SQL elegendő a problémák azonosításához, néha érdemes megnéznünk az SQL utasításnak átadott paramétereket is.

A hibernálás naplózza a bemeneti paramétereket és a lekért eredményeket a org.hibernate.type.descriptor.sql kategóriájú naplószint NYOM. Most adjuk hozzá ezt a kategóriát a konfigurációs fájljainkhoz.

A Log4J-ben:

A Log4J2-ben:

És végül a Logback-ben:

Következésképpen meg kell látnunk az SQL utasításnak átadott paraméterértékeket, valamint a végrehajtás eredményét:

2019-12-07 23:04:23 | HIBÁK | [main] o.h.SQL: 127 - beszúrás az Employee (workerNumber, name, title, id) értékekbe (?,?,?,?) 2019-12-07 23:04:23 | NYOM | [main] o.h.t.d.s.BasicBinder: 64 - kötési paraméter [1] mint [VARCHAR] - [001] 2019-12-07 23:04:23 | NYOM | [main] o.h.t.d.s.BasicBinder: 64 - kötési paraméter [2] mint [VARCHAR] - [John Smith] 2019-12-07 23:04:23 | NYOM | [main] o.h.t.d.s.BasicBinder: 52 - kötési paraméter [3] mint [VARCHAR] - [null] 2019-12-07 23:04:23 | NYOM | [main] o.h.t.d.s.BasicBinder: 64 - kötési paraméter [4] mint [BIGINT] - [1] 2019-12-07 23:04:23 | HIBÁK | [main] o.h.SQL: 127 - válassza az alkalmazott0_.id azonosítót: id1_0_, alkalmazott0_.employeeNumber mint alkalmazott2_0_, alkalmazott0_.név mint név3_0_, alkalmazott0_.title cím4_0_ az Alkalmazott alkalmazott0_ 2019-12-07 23:04:23 | NYOM | [main] o.h.t.d.s.BasicExtractor: 60 - kivont érték ([id1_0_]: [BIGINT]) - [1] 2019-12-07 23:04:23 | NYOM | [main] o.h.t.d.s.BasicExtractor: 60 - kinyert érték ([alkalmazott2_0_]: [VARCHAR]) - [001] 2019-12-07 23:04:23 | NYOM | [main] o.h.t.d.s.BasicExtractor: 60 - kinyert érték ([név3_0_]: [VARCHAR]) - [John Smith] 2019-12-07 23:04:23 | NYOM | [main] o.h.t.d.s.BasicExtractor: 50 - kinyert érték ([title4_0_]: [VARCHAR]) - [null]

Érdemes megjegyezni, hogy nem kell engedélyeznünk a org.hibernate.SQL kategória a fenti információk megtekintéséhez. A két kategóriát egymástól függetlenül engedélyezhetjük és letilthatjuk.

De, van értelme engedélyezni org.hibernate.SQL hogy tudjuk, melyik SQL utasításra vonatkoznak a paraméterértékek.

4. Aktiválja a hibernált statisztikákat

Az SQL és a JDBC paraméterértékeken kívül a Hibernate naplózhatja az egyes SQL utasítások statisztikáit is. Ez hasznos lehet a potenciális teljesítményproblémák azonosításához.

A hibernálás a kategóriát használja org.hibernate.stat hogy naplózza ezeket az információkat. De a Hibernate nem mindig generálja ezeket a statisztikákat, mert rossz hatással lehet a teljesítményre.

Első, meg kell mondanunk a Hibernate-nek, hogy állítsa elő ezeket a statisztikákat a konfigurációs tulajdonság beállításával hibernate.generate_statistics nak nek igaz.

Beállíthatjuk például ezt a tulajdonságot a sajátunkban hibernate.cfg.xml fájl:

igaz

Ezen ingatlan mellett a kategória beállítása org.hibernate.stat to DEBUG naplózza az összes végrehajtott lekérdezés statisztikáját. A munkamenet végén egy többsoros naplófájlot is naplóz, amely összefoglalja a statisztikai információkat:

2019-12-07 23:25:18 | HIBÁK | [main] o.h.s.i.StatisticsInitiator: 101 - A statisztika inicializálva [engedélyezve = igaz] 2019-12-07 23:25:19 | HIBÁK | [main] o.h.s.i.StatisticsImpl: 729 - HHH000117: HQL: from com.baeldung.hibernate.logging.Employee, time: 22ms, sorok: 1 2019-12-07 23:25:19 | INFO | [main] o.h.e.i.StatisticalLoggingSessionEventListener: 258 - Session Metrics {55600 nanoszekundumot költöttek 1 JDBC kapcsolat megszerzésére; 178600 nanoszekundum költött 1 JDBC kapcsolat felszabadítására; 2167200 nanoszekundum költött 2 JDBC utasítás elkészítésére; 2426800 nanoszekundum költött 2 JDBC utasítás végrehajtására; 0 nanoszekundum költött 0 JDBC köteg végrehajtására; 0 nanoszekundum költött 0 L2C put végrehajtására; 0 nanoszekundum költött 0 L2C találat végrehajtására; 0 nanoszekundum költött 0 L2C hiányzás végrehajtására; 47098900 nanoszekundum költött 1 öblítés végrehajtására (összesen 1 entitás és 0 gyűjtemény öblítése); 0 nanoszekundum töltött 0 részöblítés végrehajtásával (összesen 0 entitás és 0 gyűjtemény öblítése)}

Vegye figyelembe a napló első sorát, amely jelzi, hogy a statisztikák engedélyezve vannak.

5. Naplózza az összes tevékenységet

Még mélyebbre ásni a Hibernate és az adatbázis közötti interakcióba, engedélyeznünk kell a naplózást a kategóriához org.hibernate. Ez a kategória tartalmazza a Hibernate által naplózott összes üzenetet.

De óvatosan kell használnunk ezt a kategóriát, mivel ez sok napló kimenetet hozhat létre:

6. Következtetés

Ebben az oktatóanyagban a naplózás különböző szintjeit láthattuk Hibernate módban. A naplózott információk nagyon hasznosak lehetnek a fejlesztés során. De óvatosnak kell lennünk, miközben ezt engedélyezzük a gyártásban, mivel ez hátrányosan befolyásolhatja az alkalmazás teljesítményét.

Természetesen az oktatóanyaghoz tartozó kód megtalálható a GitHubon.


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