ya mpya Mipango katika Go 1.21 hutoa kumbukumbu ya muundo kwenye maktaba ya kiwango. kumbukumbu za muundo hutumia wanandoa wa thamani ya kichwa ili waweze kupakuliwa, kufichuliwa, kutafuta, na kuchambua kwa haraka na kwa uhakika. Kwa seva, kumbukumbu ni njia muhimu kwa watengenezaji wa kufuatilia tabia ya kina ya mfumo, na mara nyingi mahali pa kwanza wanakwenda kurekebisha. log/slog Kitabu cha kawaida kilikuwa na pakiti ya kumbukumbu, , tangu uwasilishaji wa awali wa Go zaidi ya miaka kumi iliyopita. Baada ya muda, tumejifunza kwamba logging ya muundo ni muhimu kwa watengenezaji wa Go. Imekuwa mara kwa mara katika nafasi ya juu katika utafiti wetu wa kila mwaka, na mipango mingi katika mazingira ya Go inatoa. Baadhi ya hizi ni maarufu sana: moja ya mipango ya kwanza ya logging ya muundo kwa Go, , inatumika katika vifurushi zaidi ya 100,000 vingine. log Mafanikio Pamoja na mipango mingi ya kusimamiwa ya kumbukumbu ya kuchagua, mipango kubwa mara nyingi huenda ikiwa ni pamoja na zaidi ya moja kupitia mahusiano yao. Programu kuu inaweza kuwa inahitaji kuunda kila moja ya mipango hii ya kumbukumbu ili matokeo ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu ya kumbukumbu. Safari ya Kuanguka Kuanguka Hapa ni programu rahisi zaidi ambayo hutumia : slog package main import "log/slog" func main() { slog.Info("hello, world") } Kama ilivyoandikwa hapo juu, inaonyesha: 2023/08/04 16:09:19 INFO hello, world ya kazi inachapisha ujumbe kwenye kiwango cha log ya Info kwa kutumia logger default, ambayo katika kesi hii ni logger default kutoka Package—logger hiyo ambayo unapata wakati wa kuandika Hii inaelezea kwa nini matokeo inaonekana sawa: tu "INFO" ni mpya. Kwa upande wa awali mfuko kazi pamoja ili iwe rahisi kuanza. Info log log.Printf slog log Pamoja na , kuna kazi kwa ngazi nyingine tatu - ya na ya pamoja na zaidi ya jumla ya Mstari wa chini: Roho inawakilisha thamani nzuri. at , viwango ni tu idadi kamili, hivyo huna kikomo kwa viwango vilivyoitwa nne. kwa mfano, ya nusu na ni 4, hivyo ikiwa mfumo wako wa kumbukumbu una ngazi kati ya hizi, unaweza kutumia 2. Info Debug Warn Error Log slog Info Warn Tofauti na ile ya mfuko, tunaweza kwa urahisi kuongeza wanandoa wa thamani muhimu kwenye matokeo yetu kwa kuandika yao baada ya ujumbe: log slog.Info("hello, world", "user", os.Getenv("USER")) Matokeo ya sasa yanaonekana kama hii: 2023/08/04 16:27:19 INFO hello, world user=jba Kama tulivyosema hapo juu, Kiwango cha juu cha kazi hutumia logger ya default. Tunaweza kupata logger hii wazi, na kuita mbinu zake: slog logger := slog.Default() logger.Info("hello, world", "user", os.Getenv("USER")) Kila kazi ya kiwango cha juu inahusiana na mbinu kwenye a Matokeo ni sawa na hapo awali. slog.Logger Mwanzoni, matokeo ya slog huenda kupitia default Unaweza kuunda kazi na uendelee haraka na matumizi ya masanduku. at kutumika kwa ajili ya logger. Picha hii ilipigwa tokea ktk veranda za moja ya vyumba vya Manyara Serena Lodge kuwasilisha taarifa zote za log katika fomu Programu hii inajenga logger mpya kwa kutumia Kwa hiyo, wito huo unatumika kwa Njia ya: log.Logger Kazi ya slog TextHandler key=value TextHandler Info logger := slog.New(slog.NewTextHandler(os.Stdout, nil)) logger.Info("hello, world", "user", os.Getenv("USER")) Sasa matokeo yanaonekana kama haya: time=2023-08-04T16:56:03.786-04:00 level=INFO msg="hello, world" user=jba Kila kitu kimebadilishwa katika mfululizo wa thamani muhimu, na safu zilizotajwa kama zinahitajika ili kuhifadhi muundo. Kwa ajili ya output ya JSON, kufunga Badala ya hayo: JSONHandler logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) logger.Info("hello, world", "user", os.Getenv("USER")) Sasa matokeo yetu ni mfululizo wa vitu vya JSON, moja kwa wito wa logging: {"time":"2023-08-04T16:58:02.939245411-04:00","level":"INFO","msg":"hello, world","user":"jba"} Wewe si mdogo kwa watumiaji wa ndani. Kila mtu anaweza kuandika watumiaji kwa kutekeleza interface. Msimamizi anaweza kuzalisha output katika muundo fulani, au anaweza kuingiza msimamizi mwingine kuongeza utendaji. Katika ya nyaraka inaonyesha jinsi ya kuandika mpangilio wa kuunganisha ambayo inabadilisha kiwango cha chini ambacho ujumbe wa kumbukumbu utaonyeshwa. slog.Handler Mfano wa slog Sintax ya kubadilisha thamani ya kichwa kwa attributes ambayo tumekuwa tunatumia hadi sasa ni rahisi, lakini kwa maagizo ya log yanayotumika mara nyingi inaweza kuwa na ufanisi zaidi kutumia Jinsi ya kuita na kuita Njia hii inafanya kazi kwa pamoja ili kupunguza utoaji wa kumbukumbu. s nje ya safu, namba, na aina nyingine ya kawaida. Attr LogAttrs Attr Wito huu wa hufanya matokeo sawa kama hapo juu, lakini hufanya haraka zaidi: LogAttrs slog.LogAttrs(context.Background(), slog.LevelInfo, "hello, world", slog.String("user", os.Getenv("USER"))) Kuna mengi zaidi ya : slog Kama ilivyoonyeshwa na wito kwa LogAttrs, unaweza kuhamisha context.Context kwa baadhi ya kazi za log ili msimamizi anaweza kuchukua habari za mazingira kama ID za kufuatilia. (Kuondoa mazingira haina kuzuia kuandikwa kwa orodha ya log.) Unaweza kuita Logger.With kuongeza sifa kwa logger ambayo itaonekana katika matokeo yake yote, kwa ufanisi kuzingatia sehemu za kawaida za maneno kadhaa ya log. Hii sio tu rahisi, lakini pia inaweza kusaidia utendaji, kama ilivyojadiliwa hapa chini. Athari zinaweza kuunganishwa katika vikundi. Hii inaweza kuongeza muundo zaidi kwa output yako ya log na inaweza kusaidia kuondoa vidokezo ambavyo vinginevyo vitakuwa sawa. Unaweza kudhibiti jinsi thamani inavyoonekana katika logs kwa kutoa aina yake na mbinu ya LogValue. ambayo inaweza kutumika kurekodi mashamba ya struct kama kikundi au kuhariri data nyeti, miongoni mwa mambo mengine. Mahali bora ya kujifunza kuhusu kila kitu Ni ya . slog Pakiti ya nyaraka Mafanikio ya Tulitaka kuwa ili kuwa haraka.Kwa faida kubwa ya utendaji, tumefanya Uwezekano wa kuendesha upatikanaji wa vifaa vya upatikanaji.The Njia hii huitwa mwanzoni mwa kila tukio la kumbukumbu, ikiwapa msimamizi nafasi ya kupoteza matukio yasiyotarajiwa ya kumbukumbu haraka. na ya Jinsi ya kuondoa mpira wa miguu kwa kuondoa mpira wa miguu mara moja, badala ya kila simu ya kumbukumbu. Aina hii ya awali inaweza kutoa kasi kubwa wakati sifa kubwa, kama vile Kwa hiyo, ni kuongezwa kwa a na kisha kutumika katika simu nyingi za logging. slog ya Handler Enabled WithAttrs WithGroup Logger.With http.Request Logger Ili kufafanua kazi yetu ya kuboresha utendaji, tulijaribu mifano ya kawaida ya logging katika miradi iliyopo ya chanzo cha wazi. Tuligundua kuwa zaidi ya 95% ya wito kwa mbinu za logging hupita sifa tano au chini. Kisha tulitoa viwango vya viwango ambavyo vimechukua matukio ya kawaida, na kutumika kama mwongozo ili kuona wapi wakati ulikuwa umepita. mchakato wa kubuni ya mfuko ni mojawapo ya kuongeza kubwa kwa maktaba ya kiwango tangu Go 1 ilizinduliwa mwaka 2012. Tulitaka kuchukua muda wetu wa kubuni, na tulijua kwamba maoni ya jumuiya itakuwa muhimu. slog Mnamo Aprili 2022, tulikusanya data ya kutosha ili kuonyesha umuhimu wa logging ya muundo kwa jamii ya Go. Timu ya Go iliamua kuchunguza kuongeza kwenye maktaba ya kiwango. Tulianza kwa kuangalia jinsi pakiti zilizopo za kumbukumbu zilizoundwa ziliundwa. Pia tulipata faida ya mkusanyiko mkubwa wa msimbo wa wazi wa Go unaohifadhiwa kwenye proxy ya moduli ya Go ili kujifunza jinsi pakiti hizi zilizotumika kwa kweli. kubuni yetu ya kwanza ilifunuliwa na utafiti huu pamoja na roho ya urahisi wa Go. Tulitaka API ambayo ni mwanga kwenye ukurasa na rahisi kuelewa, bila kuharibu utendaji. Haijawahi kuwa lengo la kubadilisha mipango iliyopo ya logging ya tatu. Wote ni nzuri katika kile wanachofanya, na kubadilisha msimbo uliopo unaofanya kazi vizuri ni nadra kutumia muda mzuri wa developer. Hii inamaanisha kuwa interface ya backend, Kwa njia hiyo, mipango iliyopo ya kumbukumbu inaweza kuzungumza na backend ya kawaida, hivyo mipango ambayo inatumia inaweza kuingiliana bila kuwa na kuandikwa upya. ya na ya . Logger Handler ya Zap Mafanikio Hifadhi ya Tulishiriki muundo wetu wa awali ndani ya timu ya Go na watengenezaji wengine ambao walikuwa na uzoefu mkubwa wa kutayarisha. Tulifanya mabadiliko kulingana na maoni yao, na mwezi Agosti 2022 tulihisi kuwa tulikuwa na muundo unaoweza kutumika. ya umma na kuanza na ili kusikia kile jamii ilikuwa na kusema. Majibu yalikuwa ya kusisimua na kwa kiasi kikubwa chanya. Shukrani kwa maoni ya ufahamu kutoka kwa wabunifu na watumiaji wa mipango mingine ya kumbukumbu ya muundo, tumefanya mabadiliko kadhaa na kuongeza vipengele kadhaa, kama vile makundi na Mabadiliko ya mapitio kutoka viwango vya log kwa integers mara mbili. utekelezaji wa majaribio Mazungumzo ya GitHub LogValuer Baada ya miezi miwili na kuhusu 300 maoni, tulihisi tumejiandaa kwa ajili ya na kusindikiza kwa Makala ya mapendekezo ilipata maoni zaidi ya 800 na kusababisha maboresho mengi kwa API na utekelezaji. Hapa ni mifano miwili ya mabadiliko ya API, wote kuhusu : mapendekezo ya Muundo wa Doc context.Context Mwanzoni API ilisaidia kuongeza loggers kwenye mazingira. Wengi walidhani kwamba hii ilikuwa njia rahisi ya kupiga logger kwa urahisi kupitia ngazi za msimbo ambazo hazijali kuhusu hilo. Lakini wengine walidhani ilikuwa kuhamia ndani ya utegemezi wa kimsingi, na kufanya msimbo kuwa vigumu kuelewa. Tulianza kupinga mfano wa kawaida wa kupitisha mazingira kama hoja ya kwanza kwa sababu hatukutaka kila wito wa logging unahitaji mazingira, lakini hatimaye kuundwa seti mbili za mbinu za logging, moja na mazingira na moja bila. Mabadiliko ambayo hatukufanya kuwa na wasiwasi juu ya syntax alternating key-and-value kwa kuonyesha sifa: slog.Info("message", "k1", v1, "k2", v2) Wengi walidhani sana kwamba hii ilikuwa wazo mbaya. Waligundua kuwa ni vigumu kusoma na rahisi kupata makosa kwa kusahau kifungo au thamani. Walipenda sifa za wazi za kuonyesha muundo: slog.Info("message", slog.Int("k1", v1), slog.String("k2", v2)) Lakini tulihisi kwamba muhtasari wa mwanga ni muhimu ili kufanya Go rahisi na ya kufurahisha kutumia, hasa kwa programu mpya za Go. ya na ya (Kwa upande wake ) kutumika kwa mafanikio vichwa na thamani za kubadilisha. tumeongeza ili kukamata makosa ya kawaida, lakini haikubadili muundo. logr go-kit/log zap SugaredLogger Kuangalia kwa Mnamo Machi 15, 2023, pendekezo hilo lilipitishwa, lakini bado kulikuwa na baadhi ya masuala madogo yasiyopitishwa. Katika wiki chache zijazo, mabadiliko kumi zaidi yalitolewa na kutatua. Utekelezaji wa mradi huo ulifanyika kwa pamoja na mfuko wa kuthibitisha wafanyabiashara na udhibiti wa kitaalamu kwa matumizi sahihi ya vifungo na thamani za kubadilisha. log/slog testing/slogtest Na tarehe 8 Agosti, Go 1.21 ilitolewa, na Tunatarajia utaona ni muhimu, na kuwa na furaha ya kutumia kama ilivyokuwa kujenga. slog Na shukrani kubwa kwa wote walioshiriki katika mjadala na mchakato wa mapendekezo. mchango wako uliboreshwa kwa kiasi kikubwa. slog rasilimali ya ya Kwa ajili ya mfuko unaelezea jinsi ya kutumia na hutoa mifano kadhaa. Takwimu ya log/slog ya ina rasilimali za ziada zinazotolewa na jumuiya ya Go, ikiwa ni pamoja na wafanyabiashara mbalimbali. Ukurasa wa wiki Ikiwa unataka kuandika mhandisi, tafadhali wasiliana na . Kazi ya kuandika mwongozo Kwa mujibu wa Jonathan Amsterdam Picha ya Jeff Smith kwenye Unsplash Kwa mfano, Jeff Smith Usiku wa Makala hii inapatikana kwenye Blog ya Go chini ya leseni ya CC BY 4.0 DEED. Blog ya Go Blog ya Go