{"id":229064,"date":"2022-11-09T16:37:00","date_gmt":"2022-11-09T13:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229064"},"modified":"2022-11-09T16:37:14","modified_gmt":"2022-11-09T13:37:14","slug":"interfejs-rejestrowania-psr-i-dlaczego-rejestrowanie-ma-znaczenie","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/interfejs-rejestrowania-psr-i-dlaczego-rejestrowanie-ma-znaczenie\/","title":{"rendered":"Interfejs rejestrowania PSR (i dlaczego rejestrowanie ma znaczenie)"},"content":{"rendered":"\n<p>Dwie funkcje PHP, kt\u00f3re, jak s\u0105dz\u0119, s\u0105 cz\u0119sto nadu\u017cywane, je\u015bli chodzi o \u201edebugowanie&quot;, to u\u017cycie <a href=\"https:\/\/php.net\/manual\/en\/function.echo.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">echo<\/a> i <a href=\"https:\/\/php.net\/manual\/en\/function.var-dump.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">var_dump<\/a>. M\u00f3wi\u0142em o tym w kilku r\u00f3\u017cnych artyku\u0142ach dotycz\u0105cych debugowania (takich jak <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/korzystanie-z-xdebug-z-usluga-valet-i-wordpress\/\" title=\"tutaj\">tutaj<\/a> i <a href=\"https:\/\/tommcfarlin.com\/debugging-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tutaj<\/a> ).<\/p>\n<p>I chocia\u017c jestem fanem u\u017cywania debuggera, my\u015bl\u0119, \u017ce wa\u017cne jest r\u00f3wnie\u017c zaimplementowanie pewnego rodzaju systemu rejestrowania, aby Ty lub Tw\u00f3j klient mogli cofn\u0105\u0107 si\u0119 i przejrze\u0107 aktywno\u015b\u0107, kt\u00f3ra ma miejsce w systemie, tak jak oni lub ich u\u017cytkownicy u\u017cywa\u0142em go.<\/p>\n<p>S\u0105 jednak dwa aspekty, aby to zrobi\u0107, zw\u0142aszcza je\u015bli chcesz \u015bledzi\u0107 interfejs logowania PSR, a s\u0105 to:<\/p>\n<ol>\n<li>zasady rzeczywistego interfejsu logowania,<\/li>\n<li>projekt, kt\u00f3ry poprawnie implementuje wspomniany interfejs logowania.<\/li>\n<\/ol>\n<p>Dlaczego wi\u0119c nie om\u00f3wi\u0107 obu w tym po\u015bcie?<\/p>\n<h2>Interfejs rejestrowania PSR<\/h2>\n<p>Interfejs <a href=\"http:\/\/www.php-fig.org\/psr\/psr-3\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">logowania PSR<\/a> (lub PSR-3) obejmuje wiele rzeczy, o kt\u00f3rych mo\u017cesz przeczyta\u0107 bardziej szczeg\u00f3\u0142owo na w\u0142a\u015bciwej stronie.<\/p>\n<p>Obejmuj\u0105 one:<\/p>\n<ol>\n<li>Podstawy<\/li>\n<li>Wiadomo\u015bci<\/li>\n<li>Kontekst<\/li>\n<li>Zaj\u0119cia pomocnicze<\/li>\n<li>Pakiety<\/li>\n<li>Interfejsy<\/li>\n<li>Poziomy dziennika<\/li>\n<li>I wi\u0119cej.<\/li>\n<\/ol>\n<p>Ale na potrzeby tego artyku\u0142u chc\u0119 opowiedzie\u0107 konkretnie o samym interfejsie, projekcie, kt\u00f3ry go implementuje i dlaczego jest to wa\u017cne.<\/p>\n<h3>Interfejs logowania<\/h3>\n<p>Strona g\u0142\u00f3wna dokumentacji stwierdza:<\/p>\n<blockquote>\n<p>W tym dokumencie opisano wsp\u00f3lny interfejs bibliotek rejestrowania.<\/p>\n<p>G\u0142\u00f3wnym celem jest umo\u017cliwienie bibliotekom otrzymywania obiektu PsrLogLoggerInterface i zapisywania do niego log\u00f3w w prosty i uniwersalny spos\u00f3b.<\/p>\n<\/blockquote>\n<p>Z punktu widzenia programisty to mi\u0142e, prawda? Chodzi mi o to, \u017ce zapewnia pojedynczy, sp\u00f3jny spos\u00f3b, na kt\u00f3ry mo\u017cemy postawi\u0107 na dowoln\u0105 bibliotek\u0119 rejestrowania, kt\u00f3r\u0105 zdecydujemy si\u0119 u\u017cywa\u0107 w naszych projektach. W dalszej cz\u0119\u015bci artyku\u0142u om\u00f3wi\u0119 moj\u0105 ulubion\u0105 bibliotek\u0119.<\/p>\n<p>Dla tych, kt\u00f3rzy s\u0105 nowicjuszami w programowaniu obiektowym lub po prostu s\u0105 ciekawi, jakie korzy\u015bci przynosi nam sp\u00f3jny interfejs, pomy\u015bl o tym w ten spos\u00f3b: niezale\u017cnie od tego, jaki system wybierzesz, masz gwarancj\u0119 posiadania okre\u015blonego zestawu funkcji, stan\u00f3w itd. mo\u017cesz u\u017cy\u0107 w swojej aplikacji.<\/p>\n<p>Ostatecznie dodanie systemu rejestrowania, kt\u00f3ry ma standard, wed\u0142ug kt\u00f3rego musi przestrzega\u0107, zapewnia szereg korzy\u015bci niezale\u017cnie od wybranej biblioteki (o ile jest on zgodny z PSR-3).<\/p>\n<h3>Try Monolog<\/h3>\n<p><a href=\"https:\/\/github.com\/Seldaek\/monolog\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Monolog<\/a> jest mniej wi\u0119cej narz\u0119dziem do logowania de facto dla aplikacji PHP.<\/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=\"Interfejs rejestrowania PSR (i dlaczego rejestrowanie ma znaczenie)\"><\/a><\/p>\n<p>\u0141atwo jest doda\u0107 projekt za pomoc\u0105 <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composera<\/a>, ale zawiera on r\u00f3wnie\u017c wiele r\u00f3\u017cnych sposob\u00f3w na wyprowadzanie danych:<\/p>\n<blockquote>\n<p>Monolog wysy\u0142a logi do plik\u00f3w, gniazd, skrzynek odbiorczych, baz danych i r\u00f3\u017cnych us\u0142ug internetowych. Zobacz pe\u0142n\u0105 list\u0119 handler\u00f3w poni\u017cej. Specjalne programy obs\u0142ugi umo\u017cliwiaj\u0105 budowanie zaawansowanych strategii rejestrowania.<\/p>\n<\/blockquote>\n<p>Osobi\u015bcie u\u017cywa\u0142em go tylko w kontek\u015bcie wysy\u0142ania danych wyj\u015bciowych do plik\u00f3w; jednak posiadanie mo\u017cliwo\u015bci wyprowadzania go do innych system\u00f3w (zw\u0142aszcza baz danych, takich jak podczas pracy z WordPress) jest przyjemna. Oczywi\u015bcie nie chcesz nadu\u017cywa\u0107 tej umiej\u0119tno\u015bci.<\/p>\n<p>Po drugie, wa\u017cne jest, aby zda\u0107 sobie spraw\u0119, \u017ce chocia\u017c mo\u017cesz utworzy\u0107 wyst\u0105pienie Loggera w ramach funkcji lub innej klasy, istniej\u0105 inne, bardziej zorientowane obiektowo sposoby na zrobienie tego. PSR-3 obejmuje to (jak wspomniano powy\u017cej).<\/p>\n<p>Kr\u00f3tko m\u00f3wi\u0105c, chcesz si\u0119 upewni\u0107, \u017ce Twoja klasa akceptuje instancj\u0119 klasy, kt\u00f3ra implementuje LoggerInterface. Monolog implementuje wspomniany interfejs, wi\u0119c to \u017caden problem.<\/p>\n<p>Co wi\u0119cej, co si\u0119 dzieje, gdy masz grup\u0119 powi\u0105zanych klas, z kt\u00f3rych wszystkie musz\u0105 zaimplementowa\u0107 rejestrowanie?<\/p>\n<ul>\n<li>Czy te klasy dziedzicz\u0105 po wsp\u00f3lnym rodzicu?<\/li>\n<li>Czy te klasy implementuj\u0105 <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.traits.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cech\u0119<\/a>? (Jest to opcja, kt\u00f3r\u0105 niedawno przedstawi\u0142 mi znajomy.)<\/li>\n<li>Czy ka\u017cda klasa po prostu akceptuje zale\u017cno\u015b\u0107 poprzez wstrzykni\u0119cie konstruktora?<\/li>\n<\/ul>\n<p>Rejestratory mo\u017cna dodawa\u0107 do klasy na wiele sposob\u00f3w i zale\u017cy to od tego, jak zorganizowany jest projekt.<\/p>\n<h2>Wi\u0119cej o logowaniu<\/h2>\n<p>W ka\u017cdym razie wprowadzenie logowania do aplikacji jest wa\u017cne z wielu powod\u00f3w, takich jak mo\u017cliwo\u015b\u0107 rozwi\u0105zywania problem\u00f3w, gdy co\u015b nie zachowuje si\u0119 zgodnie z oczekiwaniami zar\u00f3wno w przypadku programowania, przemieszczania, a zw\u0142aszcza w \u015brodowisku produkcyjnym.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je\u015bli chcesz \u015bledzi\u0107 interfejs logowania PSR, koniecznie przejrzyj PSR-3 i wypr\u00f3buj Monolog, kt\u00f3ry implementuje wspomniany interfejs loggera.<\/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":[721,845],"tags":[1169],"class_list":["post-229064","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229064","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229064"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229064\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/166192"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229064"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229064"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229064"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}