A naplózás kulcsfontosságú lépés, amelyet egy programozónak el kell végeznie a szoftverfejlesztés során. Segít a fejlesztőknek a program végrehajtása során bekövetkező események nyomon követésében, ami hasznos lehet a jövőbeli hibakeresési folyamatban. Ha új tanuló vagy új projekten dolgozik, célszerű naplózást használni a kódfolyam követésére és a hibák megoldására.
Rövid programok írása közben a legtöbben figyelmen kívül hagyják a naplózást, de amikor a program bonyolulttá válik, akkor a naplózás segítségével elengedhetetlen és hasznos lépés a hibák zavartalanításához. A naplózás nem más, mint az események beírása a szoftverbe egy naplófájlba vagy a terminál kimenete.
A naplózást nem csak hibakereséshez használják. Ez egyúttal hasznos folyamat információk gyűjtésére, használati adatok gyűjtésére és sok más hasznos feladatra is. Ez a webfejlesztők számára az egyik legáltalánosabb funkció nemcsak a hibák felderítésére, hanem a felhasználói adatok, például az IP-címek összegyűjtésére is, amelyek felhasználhatók további üzleti elemzésekhez.
A Pythonban a naplózási lehetőségek nagy részét a fakitermelés modul a python szabványos könyvtárában található, így nem kell külön konfigurálnunk. Lássuk, hogyan lehet használni a naplózáshoz a pythonban. Az oktatóanyag követése előtt telepítenie kell a Python legújabb verzióját a rendszerébe. Ha nincs telepítve a legújabb python a rendszerébe, akkor kövesse lépésről lépésre ismertető útmutatónkat a python telepítéséről és frissítéséről Linux rendszeren.
A Python naplózási modul
A python naplózási modulja az egyik leggyakrabban használt naplózó könyvtár a pythonban. A legjobb az, hogy előre telepítve van a python szabványos könyvtárával, így nem kell semmilyen konfigurációt vagy telepítést végrehajtanunk. A naplózási modul robusztus és egyszerű, ami azt jelenti, hogy kezdőknek és vállalkozásoknak egyaránt hasznos. A naplózási modul pythonban történő használatához be kell importálnunk a programunkba, ahogyan a következő kódsorban teszem.
import naplózás
Most nézzük meg egy bemutatót arról, hogyan tudunk néhány üzenetet naplózni a terminálba. Csak másolja a következő kódot a kedvenc python IDE-be és futtassa.
import naplózás naplózás.figyelmeztetés ("Ez egy figyelmeztetés")
A fenti kód futtatásakor megkapjuk a kimenetet az alábbi képen látható módon.
A kimeneten látható módon a program figyelmeztető üzenetet nyomtat. A naplózási modulnak van néhány más naplózási szintje is információk, hibák stb., amelyek megkönnyítik a feladatunkat. Beszéljük meg röviden példákkal.
Python naplózási szintek
A naplózás sok szintje felhasználható különböző üzenetek naplózására a súlyosság szintjén. A python által biztosított szintek fakitermelés modul vannak
- KRITIKAI
- HIBA
- FIGYELEM
- INFO
- HIBÁK
Ezeket a szinteket súlyosságuk csökkenő sorrendjében mutatjuk be. Nézzük meg, hogyan használhatjuk ezeket a szinteket a programunkban. Csak másolja a következő kódot, és futtassa a Python IDE-ben.
import naplózás naplózás.kritikus ("Ez egy kritikus üzenet") naplózás.hiba ("Ez egy hibaüzenet") naplózás.figyelmeztető ("Ez egy figyelmeztető üzenet") naplózás.info ("Ez egy információs üzenet") naplózás.debug ("Ez egy Debug üzenet")
A fenti kód futtatásakor az IDE-ben a kimenet, amelyet a terminál mutat, az alábbi képen látható.
Amint a kimeneten látható, a DEBUG és INFO üzenetek nem kerülnek kinyomtatásra a terminálban, mert a naplózó modul alapértelmezés szerint csak a figyelmeztetésnél magasabb vagy azzal egyenlő biztonsági szintű üzeneteket naplóz. Az INFO és a DEBUG megjelenítéséhez a terminálon manuálisan meg kell változtatnunk a naplózó alapkonfigurációját. Ehhez használhatjuk az basicConfig (**kwargs) módszer a naplózási modul által biztosított. A konfiguráció egyszerű bemutatójának megtekintéséhez futtassa a következő kódot a Python IDE-be.
import naplózás naplózás.basicConfig (szint = naplózás.Hibakeresési naplózás.kritikus ("Ez egy kritikus üzenet") naplózás.hiba ("Ez egy hibaüzenet") naplózás.figyelmeztető ("Ez egy figyelmeztető üzenet") naplózás.info ("Ez egy információs üzenet") naplózás.debug ("Ez egy Debug üzenet")
A fenti kódban beállítottuk a szintet fakitermelés.HIBÁK, ami azt jelenti, hogy minden olyan szintet naplózni fognak, amelyek meghaladják a hibakeresési szintet. Így a fenti kódban az összes üzenet naplózásra kerül, az alábbi képen látható módon.
Beszéljünk részletesebben a naplózási modul basicConfig () metódusáról.
Alapkonfigurációk
A naplózási modul egy nagyon hasznos metódust biztosít a basicConfig (** Kwargs) segítségével, amelyet az adatok naplózásához szükséges konfigurációk beállításához használnak. A basicConfig () függvény néhány gyakran használt paramétere a következő:
- szint: Ez a súlyossági szint beállítására szolgál, amelyet naplózni kell.
- fájl név: Ez arra a fájlra vonatkozik, ahová az üzeneteket naplózni akarjuk. Ha nem definiáljuk a fájlt, akkor a rendszer a naplóba kerül, ahogyan eddig láthattuk.
- fájlmód: Ezt akkor használják, amikor a naplókat fájlba írjuk. Ezek a paraméterek elfogadják a megnyitandó naplófájl módját. Alapértelmezés szerint az 'a' módra van állítva, ami azt jelenti, hogy a fájl függelék módban nyílik meg.
- formátum: Ez a naplóüzenet formázására szolgál, amire szükségünk van a megjelenítéshez.
Lássuk, miként használhatjuk ezeket a konfigurációkat a python naplózási moduljában, egymás után példa feltárásával.
A level paraméter a súlyosság szintjének beállítására szolgál, annak gyakorlati bemutatásához, hogyan kell használni, másolja az alábbi kódot a python IDE-be és futtassa.
import naplózás naplózás.basicConfig (szint = naplózás.INFO) naplózás.kritikus ("Ez egy kritikus üzenet") naplózás.hiba ("Ez egy hibaüzenet") naplózás.figyelmeztető ("Ez egy figyelmeztető üzenet") naplózás.info ("Ez egy információs üzenet") naplózás.debug ("Ez egy Debug üzenet")
A kód futtatásakor megjelenhet a kimenet, amint az az alábbi képen látható. Amint láthatja, hogy az információs szintek feletti üzenetek kinyomtatásra kerülnek, de a hibakeresési szintü üzenet nem nyomtatódik ki.
A level paraméter egy hasznos konfiguráció, amelyet meg kell tenni, hogy a naplófájlok ne legyenek túl nagyak felesleges adatokkal, és csak a szükséges információkkal rendelkezzenek.
Bejelentkezés egy fájlba
Csak láttuk, hogyan kell bejelentkezni a terminálba, de a terminálra való bejelentkezés nem mindig hasznos, mivel nem tudjuk későbbi felhasználásra elmenteni. A jobb megoldás érdekében kinyomtathatjuk a naplókat egy szöveges fájlba, amelyet később elmentünk és elemezünk. A naplók szövegesek, és bármilyen formátumú szövegfájlban megtarthatók, de általánosan elfogadott a naplók fájlba mentése a .napló kiterjesztés. Ezeket a fájlokat naplófájloknak nevezik, és univerzálisan használják programok, webalkalmazások és egyéb szoftverek naplóinak tárolására.
A naplókat fájlba menthetjük, ha beállítjuk a naplózási modul konfigurációját az basicConfig () függvény segítségével. Meg kell adnunk annak a fájlnak a nevét, ahová a naplókat menteni akarjuk, az basicConfig () függvény fájlnév paraméterében, amely után a rekordok automatikusan kinyomtatásra kerülnek az általunk megadott naplófájlban. Nézzünk meg egy gyakorlati példát, hogy megtudjuk, hogyan működik.
import naplózás naplózás.basicConfig (szint = naplózás.INFO, fájlnév = "mylog.napló ") naplózás.kritikus ("Ez egy kritikus üzenet") naplózás.hiba ("Ez egy hibaüzenet") naplózás.figyelmeztető ("Ez egy figyelmeztető üzenet") naplózás.info ("Ez egy információs üzenet") naplózás.debug ("Ez egy Debug üzenet")
A kód futtatásakor láthatja, hogy új fájl jött létre a jelenlegi munkakönyvtár nevében mylog.napló. Amikor megnyitja a fájlt egy szövegszerkesztővel, észreveheti, hogy a naplókat elmentették a fájlba.
Ha újra futtatjuk a kódot, látni fogjuk, hogy a napló hozzá lesz fűzve a fájlhoz. Ezen változtathatunk, ha megadjuk a filemode paramétert a basiconfig () függvényben. Alapértelmezés szerint a filemode paraméter értéke „a”, amely a függeléket jelenti. De néha törölni akarjuk a korábban naplózott adatokat is, és az új naplókat csak a fájlba írjuk. Ehhez megadhatjuk a filemode paraméternek az „w” értéket, amely az írást jelenti, és töröl minden korábbi adatot a fájlból, és megírja az újakat. Bemutatóért lásd a következő példát.
import naplózás naplózás.basicConfig (szint = naplózás.INFO, fájlnév = "mylog.log ", filemode =" w ") naplózás.kritikus ("Ez egy kritikus üzenet") naplózás.hiba ("Ez egy hibaüzenet") naplózás.figyelmeztető ("Ez egy figyelmeztető üzenet") naplózás.info ("Ez egy információs üzenet") naplózás.debug ("Ez egy Debug üzenet")
A fenti kód futtatásakor észreveheti, hogy a fájlban lévő korábbi naplók eltávolításra kerültek a fájlból, és az új naplók hozzá lettek adva. Minden alkalommal, amikor futtatjuk a kódot, az új naplók hozzáadódnak, és az előző törlődik, ami akkor hasznos, ha nincs szükségünk a rekordokra további felhasználáshoz.
A naplók formázása
Láttuk, hogy a kimeneti naplók alapértelmezett elrendezésűek, de a formátumot megváltoztathatjuk az basicConfig () függvény formátumparaméterének beállításával. Nézzünk meg egy gyakorlati bemutatót, hogy megtudjuk, hogyan használhatjuk a basicConfig () függvény formátumparaméterét a napló formátumának megváltoztatásához.
import naplózás naplózás.basicConfig (szint = naplózás.INFO, format = "% (fájlnév) s:% (levelname) s:% (message) s") naplózás.kritikus ("Ez egy kritikus üzenet") naplózás.hiba ("Ez egy hibaüzenet") naplózás.figyelmeztető ("Ez egy figyelmeztető üzenet") naplózás.info ("Ez egy információs üzenet") naplózás.debug ("Ez egy Debug üzenet")
A fenti kód kimenete az alábbi képen látható.
Amint a kimeneten látható, a fájlnév is megjelent. Használhatjuk a format paramétert sok más formátum megjelölésére, amelyek segítségével megvitathatunk néhányat.
% (aktuális idő) s: Ez az ember által olvasható idő megjelenítésére szolgál a naplókban. Az idő megjelenítésének megtekintéséhez futtassa a következő kódot a Python IDE-ben.
import naplózás naplózás.basicConfig (szint = naplózás.INFO, format = "% (asctime) s:% (message) s") naplózás.figyelmeztetés ("Ez egy figyelmeztető üzenet")
A kód futtatásakor megjelenhet a kimenet, amint az az alábbi képen látható.
% (létrehozva) f: Ez megjeleníti a napló létrehozásának idejét.
% (fájlnév) s: Ez a fájl nevének megjelenítésére szolgál a naplóüzenetben. A működésének megtekintéséhez futtassa a következő példakódot a Python IDE-jében.
import naplózás naplózás.basicConfig (szint = naplózás.INFO, format = "% (asctime) s:% (fájlnév) s:% (üzenet) s" naplózás.figyelmeztetés ("Ez egy figyelmeztető üzenet")
A kód által biztosított kimenetet a következő kép mutatja. A kimenetben a fájl neve látható. Ez akkor hasznos, ha több fájlt tartalmazó projekten dolgozunk, így gyorsan megszerezhetjük a hibát tartalmazó fájlt.
% (levelname) s: Ez a használt szint nevének megjelenítésére szolgál, például WARNING, DEBUG stb.
% (levelno) s: Ez arra a szintre vonatkozik, amelynek az üzenet része a számértéke.
% (fehérnemű) d: Ez az aktuális sor sorszámának kinyomtatására szolgál, amely megjeleníti az üzenetet. Ez nagyon hasznos, mivel megadja a sor számát, ahol hibát kell látnunk, így segíti a hibakeresési folyamatot. Lássunk egy példakódot, hogy lássuk, hogyan lehet ezt felhasználni a naplók kimenetének kialakításához.
import naplózás Formátum = '% (asctime) s:% (fájlnév) s:% (lineno) d:% (üzenet) s' naplózás.basicConfig (szint = naplózás.INFO, format = Format) naplózás.figyelmeztetés ("Ez egy figyelmeztető üzenet")
Ez a kód kinyomtatja a nem sort is, amint az az alábbi képen látható.
%(üzenetek: A bejelentkezett üzenet megjelenítésére szolgál.
% (elérési út) s: Ez a forráskódfájl teljes elérési útjának megjelenítésére szolgál.
% (folyamat) d: Ez megjeleníti a folyamat azonosítóját, ha rendelkezésre áll.
% (processname) s: Ez megjeleníti a folyamat nevét, ha elérhető.
% (szál) d: Ez megjeleníti a szál azonosítóját, ha elérhető.
% (threadName) s: Ez megjeleníti a szál nevét, ha elérhető.
Változó adatok naplózása
Magunk adtuk meg a naplókban szereplő üzeneteket, amelyek statikus adatok. Mégis, a valós alkalmazásokban a naplózott adatok többnyire dinamikus információk lesznek az alkalmazásunkból. Ehhez ki kell adnunk a változókat az üzenetnaplóval. Ezt sokféleképpen tehetjük meg. Például felvehetjük a változókat, és formázhatjuk a karakterláncot helyőrzőkkel, majd továbbíthatjuk az üzenetnaplóba, hogy a változók értékei megjelenjenek a rekordokban.
Lásd például az alábbi kódot; átmásolhatja a futtatott kódot a python IDE-jébe.
import logging var_message = "belső hiba" naplózás.figyelmeztetés ("A kiszolgáló leállt a% s miatt", var_message)
A kód futtatásakor látni fogja a kimenetet, amint az az alábbi képen látható. Amint a képen látható, hogy a változóban tárolt érték is kinyomtatásra kerül a képernyőn.
A naplókban változókat is megjeleníthetünk az f-karakterláncok segítségével, amelyeket a Python 3-ban vezetünk be.6. De az f-karakterláncok használatához python 3-ra lesz szükség.6 vagy újabb telepítve a rendszerébe. A terminálon a következő parancs futtatásával ellenőrizheti, hogy mely Python verzió van telepítve a rendszerébe.
python --version # for python 2 Linux alatt python3 --version # for python 3 Linux alatt
Ez kinyomtatja a rendszerben használt python verzióját. Jó gyakorlat a python legújabb verziójának használata a jobb teljesítmény érdekében; láthatja útmutatónkat a python verzió frissítéséhez Linux alatt.
A karakterláncok formázásához az f-karakterláncok használatával a pythonban a következő kódszintaxist kell használnunk. Másolhatja és futtathatja a kódot a kedvenc python IDE-jében.
import logging var_message = "belső hiba" naplózás.figyelmeztetés (f "A szerver leállt a (z) var_message miatt")
A kód futtatásakor hasonló kimenetet kap, mint amit a fenti kód futtatásakor kapunk. De amikor meglátjuk a kódot, észrevehetjük a karakterlánc elején az f értéket, amely azt jelzi, hogy egy f-karakterláncról van szó, és közvetlenül használhatjuk az f-karakterláncokban a változót, ha göndör zárójelbe tesszük őket.
Verem nyomainak naplózása
A naplózási modul veremnyomok rögzítésére is használható. A verem nyomai azok a kivételes üzenetek, amelyeket akkor dobunk, ha hiba történt a programban. A kivételt úgy rögzíthetjük, hogy az exc_info paramétert True értékre állítjuk, miközben meghívjuk a naplózási funkciót. Ez a paraméter hasznos, mivel a teljes kivételüzenetet a hibaüzenetünkkel egy fájl vagy terminál képernyőn tudjuk naplózni.
Ahhoz, hogy gyakorlati bemutatót kapjon arról, hogy miként tudjuk eltüntetni a verem nyomát, másolja a következő kódot a python IDE-be és futtassa.
naplófájl importálása: a = 1/0, kivéve a kivételként e: naplózást.hiba ("Hiba történt", exc_info = Igaz)
A kód futtatásakor a kivétel naplózásra kerül a terminálon. Látni fogja a kód kimenetét, az alábbi képen látható módon. A kivételt fájlba is beírhatja az alapkonfig () metódus fájlnevének paraméterével, amint azt fentebb tárgyaltuk.
Ez a módszer kritikus fontosságú a kiterjedt alkalmazás kiépítése során is, mivel kivételkezeléssel rendelkezhetünk naplózással, ami kiváló a hibakeresési folyamathoz.
Naplózó objektumok
A naplózási modul néhány hasznos osztályt is tartalmaz, amelyek felhasználhatók a jobb naplózáshoz, főleg egy szélesebb körű alkalmazáshoz. Nézzük meg a naplózási modul néhány leggyakrabban használt osztályát, és azt, hogy mik és hogyan működnek.
- Fakitermelők: A Napló osztály az az osztály, amelynek objektumaival közvetlenül meghívják a függvényeket.
- Kezelők: A kezelőket arra használják, hogy a naplóüzeneteket a kívánt kimeneti helyre küldjék, i.e., fájl vagy konzol.
- Szűrők: Ez a naplórekordok megjelenítésének szűrésére szolgál.
- Formázók: Ezeket használták a naplóküzenetek kimenetének formázására.
Ha teljes körű részleteket szeretne kapni ezekről az osztályokról, olvassa el a python naplózási modul hivatalos dokumentációját.
Következtetés
Ebben a cikkben megismertük a naplózás alapjait a pythonban. A naplózási modul egy egyszerű és hatékony módja a naplózásnak a pythonban. Tegyük fel, hogy mostanáig nem naplózol, ma kezdem el a naplózást, amikor elolvasod a cikket, és megtanultad, milyen egyszerű a naplózás használata a pythonban. Mostantól mind a kis, mind a jelentős alkalmazásokban használhatja a naplózást.
Ha helyesen naplózol, az valóban hasznos lehet ilyen vagy olyan módon. Azt tanácsolom, hogy kezdje el használni kis programoktól, mivel ez segít Önnek abban, hogy jól ismerje a dolgot, és felbecsülhetetlen lesz a nagy projekteknél. Azt is megtudhatja, hogyan kell működni az SQLite adatbázisokkal a pythonban.