More

    Az esemény nyomán: hogyan lehet hatékonyan bejelentkezni

    Megtanuljuk, hogyan kell megfelelően karbantartani a naplókat egy PHP alkalmazásban, hogy 20216.szeptember 16-án gyorsan megtalálhassuk a hibákat.A cikk szerzője Ilya ZobenkoПо следам происшествия: как логировать эффективно1По следам происшествия: как логировать эффективно2A cikk szerzője Ilya ZobenkoПо следам происшествия: как логировать эффективно3https://gbcdn.mrgcdn.ru/uploads/post/2755/og_image/efacb053428ba430e214ab2a3bd538f6.png

    По следам происшествия: как логировать эффективно4

    Az emberek hajlamosak hibázni. Ez nem csak a fejlesztőkre, hanem a felhasználókra is vonatkozik. A fejlesztés során egyszerű hibakereséssel ellenőrizzük a folyamatot, illetve megoldjuk a program rossz viselkedését. De nem mindig könnyű megvizsgálni egy olyan esetet, amely termelési környezetben történt. Ilyen helyzetekben a magazinok mentésre kerülnek. Annak érdekében, hogy valóban hasznosak legyenek, helyesen kell őket végrehajtani.

    A naplózás az ilyen naplók fenntartásának folyamata. Segít felismerni a rejtett hibákat, megérteni a felhasználói problémákat, egyszerűen megérteni, mi történt valójában. A legegyszerűbb megvalósításban az ilyen naplók szöveges fájlba vannak írva, amelyek tartalmazzák a bekövetkezett esemény pontos idejét és leírását. Számos megközelítés létezik a fakitermeléshez, és a bevált gyakorlatokat már régóta meghatározták — ez jó nekünk.

    Ebben a cikkben meg fogjuk érteni, hogyan kell megfelelően megszervezni a naplózást egy PHP alkalmazásban, Hogyan lehet hatékonyan együttműködni velük, és mely könyvtárak és eszközök hasznosak lehetnek.

    A PSR-3 szabvány. Naplózási szintek

    PSR egy sor ajánlást PHP fejlesztők. Ez tartalmaz tippeket a tervezés a kód, néhány interfész, valamint egyéb ajánlásokat. Az egyik dokumentuma (PSR-3) A logger végrehajtására szolgál.

    Azt javaslom, hogy ismerkedjen meg ezekkel az ajánlásokkal a benne kínált naplózási szintekkel.

     
    

    A PSR-3 8 üzenetszintet határoz meg. Ha helyesen használja őket, könnyebb lesz hibákat keresni, és gyorsabban tud reagálni az eseményekre. Kitaláljuk, hogyan válasszunk ki egy szintet:

    • Hibakeresés - hibakeresési információk, amelyek részletesen feltárják az esemény részleteit;
    • Információ - bármilyen érdekes esemény. Például, amikor a felhasználó bejelentkezett;
    • Értesítés- fontos események a várható viselkedésen belül;
    • Figyelem- kivételes helyzetek, amelyek nem hibák. Például egy elavult módszer használatával helytelen kérés az API - ban;
    • Hiba - hibák, amelyeket ellenőrizni kell, de nem igényelnek sürgős korrekciót;
    • Kritikus - kritikus állapot vagy esemény. Például egy összetevő hiánya, váratlan kivétel (kivétel);
    • Riasztás - hiba vagy esemény, amely sürgős intézkedést igényel. Például, ha az adatbázis nem érhető el;
    • Vészhelyzet - olyan helyzet, amikor a program vagy a rendszer teljesen le van tiltva.

    Ezeknek a szinteknek a használatához elegendő hozzáadni a nevüket az egyes naplóbejegyzések sorához. Például:

     [2021-01-01 12: 10: 35] website.INFO: a felhasználó megváltoztatta jelszavát

    További információk gyakran kerülnek a Riasztás és Vészhelyzet szintek, például SMS-ben. Használata Információ, könnyen visszaállíthatja a felhasználói műveletek sorrendjét, a Hibakeresés, megtudhatja a változók pontos értékeit, a függvény eredményét egy bizonyos helyen, stb.

    OLVASS TOVÁBB:  "Elérte az" üvegplafont "és megkezdte a további fejlesztést"

    PSR-3. Interfész A logger osztályhoz

    A szintekkel rendelkező osztály mellett a PSR-3 felületet kínál nekünk saját naplózóink megvalósításához-LoggerInterface. Nagyon hasznos megfigyelni, mivel a legtöbb meglévő könyvtár támogatja. Ha úgy dönt, hogy kicseréli a loggert egy másikra,csak csatlakoztasson egy új osztályt.

    LoggerInterface megköveteli a naplózási módszerek végrehajtását — és figyelembe veszi a fent tárgyalt szinteket. Hozzuk létre a saját logger osztály, amely megfelel ennek a felületnek, hogy bejegyzéseket a fájlba.

    OLVASS TOVÁBB:  "A tudás és a tapasztalat ötvözése profivá tesz"

    A kezdéshez letöltjük a PSR-3 szabvány kódját Zeneszerző.

     zeneszerző req psr / log

    A letöltött csomag több osztályt, tulajdonságot és interfészt tartalmaz. Ezek közé tartozik a LogLevel, amelyet a fentiekben elemeztünk, valamint a LoggerInterface, amelyet jelenleg érdekel a. Hozzunk létre egy új osztályt, amely megvalósítja ezt a felületet. Fontos: győződjön meg róla, hogy engedélyezve van az autoloader osztály (szállító / autoload.php).

     
    
     
    

    Létrehoztunk egy osztályt. De ahhoz, hogy megfeleljen a szabvány követelményeinek, meg kell írnia az interfészben leírt összes módszert. Ezek közül a legfontosabb a napló. Ez jelzi a fájlba való írás fő logikáját.

     osztály FileLogger végrehajtja LoggerInterface { // ...    public function log($level, $message, array $context = []): void { // az aktuális dátum az 1970-12-01 formátumban 23:59:59 $dateFormatted = (new DateTime())->format('Y-m-D H:i:s'); // az üzenetet úgy gyűjtjük össze, hogy a dátumot, szintet és szöveget helyettesítjük a $message = sprintf( '[%S] %S: %S%S % S', $dateFormatted, $szint, $üzenet, php_eol // sortörés); / / írjon a GB fájlba. log file_put_contents ('gb. log', $message, FILE_APPEND); / / FILE_APPEND - lehetővé teszi rekordok hozzáadását a meglévőkhöz, / / a régi naplók felülírása nélkül}//... }

    A LoggerInterface felület teljes kielégítéséhez implementációt kell írnunk a vészhelyzet, riasztás, kritikus, hiba, figyelmeztetés, Figyelmeztetés, értesítés, info és hibakeresési módszerekhez, amelyek megfelelnek a szinteknek (a fentiekben elemeztük őket). Végrehajtásuk egy nagyon egyszerű elvre vezethető vissza:a naplómódszert hívjuk, átadva a szükséges szintet.

     osztály FileLogger végrehajtja LoggerInterface { // ...    public function emergency($message, array $context = []): void {//A szint átadása a LogLevel osztályból $this->log(LogLevel:: vészhelyzet, $message, $context);} public function alert($message, array $context = []): void { $this->log(LogLevel:: ALERT, $message, $context);} / / és így tovább // ... }

    A logger használata

    Most, hogy osztályunk megvalósítja a PSR-3 szabvány által javasolt felületet, könnyen használhatjuk bárhol. Például a fájlban index.php:

     hibakeresés ('üzenet az indexből.php');

    Vagy bármely más osztályban.

     logger = $logger; } public function doSomeAction (): void {///performing any actions $this->logger -> debug ('Message from ExampleService');} }}

    Kérjük, vegye figyelembe: nem a végleges implementációt (FileLogger) adjuk meg a konstruktor argumentum típusának, hanem a PSR-3 szabvány interfészét. Ez kényelmes, mert lehetővé teszi, hogy könnyen cserélje ki a használt loggert bármely más, amely támogatja ezt a felületet.

    Kontextus

    Lehet, hogy észrevette, hogy a LoggerInterface felület összes módszere tartalmazza a $context argumentumot. Miért van rá szükség?

    A kontextust úgy tervezték, hogy kiegészítő, gyakran dinamikus információkat közvetítsen. Például, ha hibakeresési bejegyzést készít (hibakeresési szint), akkor a változó értékét átadhatja a kontextusnak.

    Ennek az érvnek az alkalmazásához támogatnunk kell a naplómódszerben. Finomítsuk meg, mivel a $kontextus egy tömb.

     format('Y-m-D H:i:s'); // konvertáló $context to json format $contextString = json_encode($context); $message = sprintf( '[%s] %S: %S %S%S % S % S % S % S', $dateFormatted, $level, $message, $contextString, // hozzáadása kontextus a php_eol log Line ); file_put_contents('GB.log', $message, FILE_APPEND);}//... }

    Most, bármely pontján A logger hívás, tudjuk átadni egy sor további információt a második érv.

     hibakeresés ('üzenet az indexből.php', [ 'user_name' => $felhasználónév, 'user_email' => $userEmail, ]);

    Ennek eredményeként a következő formanyomtatványt kapjuk:

     [2021-09-02 13:00:24] hibakeresés: üzenet az indexből.php {"user_name":"GeekBrains","user_email":"user@gb.ru"}

    A kontextust illetően van egy egyszerű szabály: minden dinamikus információt át kell adni benne, de nem az üzenetben. Ez azt jelenti, hogy ha üzenetet hoz létre a naplóban a sprintf vagy a karakterláncváltozók összefűzése segítségével, valószínűleg ezt az információt kontextusba lehet helyezni. E szabály betartásával könnyebb keresni valamit a naplóban, mert nem kell előre jeleznie (vagy kiszámítania) a változók értékeit.

    Monológ Könyvtár

    A fakitermelés elvének egyszerűsége ellenére ezen a területen széles körű módosítások vannak. Támogathatunk más rekordformátumokat, végrehajthatunk SMS-küldést, vagy egyszerűen lehetővé tehetjük a végső naplófájl nevének megváltoztatását.

    Nagyszerű, hogy mindez már a legtöbb könyvtárban megvalósult. Az egyik leggyakoribb a monolog.

    A csomag jelentős előnyei közé tartozik:

    • Teljes PSR-3 támogatás;
    • a különböző naplófeldolgozási elvek támogatása a szinttől függően;
    • csatorna nevek támogatása (logger nevek);
    • nagyon széles támogatás a keretekhez.

    A csodálatos eszköz használatának megkezdéséhez telepítjük azt Zeneszerző.

    Friss cikkek

    Kapcsolódó történetek

    HOZZÁSZÓLOK A CIKKHEZ

    Kérjük, írja be véleményét!
    írja be ide nevét

    Maradjon op - Ge a napi híreket a postaládájában