{"id":229006,"date":"2022-11-09T17:09:00","date_gmt":"2022-11-09T14:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229006"},"modified":"2022-11-09T17:09:06","modified_gmt":"2022-11-09T14:09:06","slug":"psr-loggningsgraenssnitt-och-varfoer-loggning-aer-viktig","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/psr-loggningsgraenssnitt-och-varfoer-loggning-aer-viktig\/","title":{"rendered":"PSR-loggningsgr\u00e4nssnitt (och varf\u00f6r loggning \u00e4r viktig)"},"content":{"rendered":"\n<p>Tv\u00e5 funktioner i PHP som jag tror ofta \u00f6veranv\u00e4nds n\u00e4r det kommer till &quot;debugging&quot; \u00e4r att anv\u00e4nda <a href=\"https:\/\/php.net\/manual\/en\/function.echo.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">echo<\/a> och <a href=\"https:\/\/php.net\/manual\/en\/function.var-dump.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">var_dump<\/a>. Jag har pratat om detta i n\u00e5gra olika artiklar om fels\u00f6kning (som <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/anvaender-xdebug-med-valet-och-wordpress\/\" title=\"h\u00e4r\">h\u00e4r<\/a> och <a href=\"https:\/\/tommcfarlin.com\/debugging-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4r<\/a> ).<\/p>\n<p>Och lika mycket som jag \u00e4r ett fan av att anv\u00e4nda en debugger, tror jag att det ocks\u00e5 \u00e4r viktigt att implementera en typ av loggningssystem s\u00e5 att du eller din klient kan g\u00e5 tillbaka och granska aktiviteten som har h\u00e4nt i systemet som de eller deras anv\u00e4ndare har gjort. har, du vet, anv\u00e4nt det.<\/p>\n<p>Det finns dock tv\u00e5 aspekter av att g\u00f6ra detta, s\u00e4rskilt om du funderar p\u00e5 att f\u00f6lja PSR-loggningsgr\u00e4nssnittet och de \u00e4r:<\/p>\n<ol>\n<li>reglerna f\u00f6r sj\u00e4lva loggningsgr\u00e4nssnittet,<\/li>\n<li>ett projekt som korrekt implementerar n\u00e4mnda loggningsgr\u00e4nssnitt.<\/li>\n<\/ol>\n<p>S\u00e5 varf\u00f6r inte ta itu med b\u00e5da i det h\u00e4r inl\u00e4gget?<\/p>\n<h2>PSR-loggningsgr\u00e4nssnittet<\/h2>\n<p>PSR &#8211; <a href=\"http:\/\/www.php-fig.org\/psr\/psr-3\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">loggningsgr\u00e4nssnittet<\/a> (eller PSR-3) t\u00e4cker ett antal saker som du kan l\u00e4sa mer om p\u00e5 sj\u00e4lva sidan.<\/p>\n<p>Dessa inkluderar:<\/p>\n<ol>\n<li>Det grundl\u00e4ggande<\/li>\n<li>Meddelanden<\/li>\n<li>Sammanhang<\/li>\n<li>Hj\u00e4lparklasser<\/li>\n<li>Paket<\/li>\n<li>Gr\u00e4nssnitt<\/li>\n<li>Logga niv\u00e5er<\/li>\n<li>Och mer.<\/li>\n<\/ol>\n<p>Men f\u00f6r den h\u00e4r artikelns syften vill jag prata specifikt om sj\u00e4lva gr\u00e4nssnittet, ett projekt som implementerar det, och varf\u00f6r det \u00e4r viktigt.<\/p>\n<h3>Loggningsgr\u00e4nssnittet<\/h3>\n<p>P\u00e5 hemsidan f\u00f6r dokumentationen st\u00e5r det:<\/p>\n<blockquote>\n<p>Detta dokument beskriver ett vanligt gr\u00e4nssnitt f\u00f6r loggning av bibliotek.<\/p>\n<p>Huvudm\u00e5let \u00e4r att till\u00e5ta bibliotek att ta emot ett PsrLogLoggerInterface-objekt och skriva loggar till det p\u00e5 ett enkelt och universellt s\u00e4tt.<\/p>\n<\/blockquote>\n<p>Ur utvecklingssynpunkt \u00e4r det bra, eller hur? Jag menar, det ger ett enda, konsekvent s\u00e4tt som vi kan satsa p\u00e5 f\u00f6r vilket loggningsbibliotek vi \u00e4n v\u00e4ljer att anv\u00e4nda i v\u00e5ra projekt. Jag kommer att t\u00e4cka mitt f\u00f6redragna bibliotek senare i artikeln.<\/p>\n<p>F\u00f6r dig som \u00e4r ny p\u00e5 objektorienterad programmering eller helt enkelt nyfiken p\u00e5 hur ett konsekvent gr\u00e4nssnitt gynnar oss, t\u00e4nk p\u00e5 det s\u00e5 h\u00e4r: Oavsett vilket system du v\u00e4ljer kommer du garanterat att ha en viss upps\u00e4ttning funktioner, tillst\u00e5nd och s\u00e5 vidare. kan anv\u00e4nda i din ans\u00f6kan.<\/p>\n<p>Att l\u00e4gga till ett loggsystem som har en standard som det m\u00e5ste f\u00f6lja ger i slut\u00e4ndan en m\u00e4ngd f\u00f6rdelar oavsett vilket bibliotek du v\u00e4ljer (s\u00e5 l\u00e4nge det \u00f6verensst\u00e4mmer med PSR-3).<\/p>\n<h3>Testa Monolog<\/h3>\n<p><a href=\"https:\/\/github.com\/Seldaek\/monolog\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Monolog<\/a> \u00e4r mer eller mindre det de facto loggningsverktyget f\u00f6r PHP-applikationer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166191-61e78fbe1b295.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166191-61e78fbe1b295.png\" alt=\"PSR-loggningsgr\u00e4nssnitt (och varf\u00f6r loggning \u00e4r viktig)\"><\/a><\/p>\n<p>Det \u00e4r enkelt att l\u00e4gga till projektet via <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> men det inneh\u00e5ller ocks\u00e5 en m\u00e4ngd olika s\u00e4tt att mata ut data:<\/p>\n<blockquote>\n<p>Monolog skickar dina loggar till filer, sockets, inkorgar, databaser och olika webbtj\u00e4nster. Se hela listan \u00f6ver hanterare nedan. Specialhanterare l\u00e5ter dig bygga avancerade loggningsstrategier.<\/p>\n<\/blockquote>\n<p>Personligen har jag anv\u00e4nt det bara inom ramen f\u00f6r att skicka utdata till filer; Men att ha m\u00f6jligheten att mata ut det till andra system (s\u00e4rskilt databaser som n\u00e4r man arbetar med WordPress) \u00e4r trevligt. Den f\u00f6rm\u00e5gan vill man f\u00f6rst\u00e5s inte missbruka.<\/p>\n<p>F\u00f6r det andra \u00e4r det viktigt att inse att \u00e4ven om du kan instansiera Loggern inom en funktion eller en annan klass, s\u00e5 finns det andra, mer objektorienterade s\u00e4tt att g\u00f6ra detta. PSR-3 t\u00e4cker detta (som n\u00e4mnts ovan).<\/p>\n<p>Kort sagt, du vill se till att din klass accepterar en instans av en klass som implementerar LoggerInterface. Monolog implementerar n\u00e4mnda gr\u00e4nssnitt, s\u00e5 det \u00e4r inga problem.<\/p>\n<p>Dessutom, vad h\u00e4nder n\u00e4r du har en grupp relaterade klasser som alla beh\u00f6ver implementera loggning?<\/p>\n<ul>\n<li>\u00c4rver dessa klasser fr\u00e5n en gemensam f\u00f6r\u00e4lder?<\/li>\n<li>Implementerar dessa klasser en <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.traits.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">egenskap<\/a>? (Detta \u00e4r ett alternativ som en v\u00e4n nyligen presenterade f\u00f6r mig.)<\/li>\n<li>Accepterar varje klass helt enkelt beroendet via konstruktorinjektion?<\/li>\n<\/ul>\n<p>Det finns en m\u00e4ngd olika s\u00e4tt som loggare kan l\u00e4ggas till i en klass och det beror p\u00e5 hur ditt projekt \u00e4r organiserat.<\/p>\n<h2>Mer om loggning<\/h2>\n<p>Hur som helst \u00e4r det viktigt att inf\u00f6ra inloggning i en applikation av en m\u00e4ngd olika anledningar som att kunna fels\u00f6ka n\u00e4r n\u00e5got inte beter sig som f\u00f6rv\u00e4ntat i b\u00e5de utveckling, iscens\u00e4ttning och speciellt i produktionen.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Om du funderar p\u00e5 att f\u00f6lja PSR-loggningsgr\u00e4nssnittet, se till att granska PSR-3 och kolla in Monolog som implementerar n\u00e4mnda loggergr\u00e4nssnitt.<\/p>\n","protected":false},"author":1,"featured_media":166192,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,724],"tags":[1173],"class_list":["post-229006","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229006","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=229006"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229006\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/166192"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}