[{"data":1,"prerenderedAt":1358},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-logx-monolog":449,"-hu-logx-monolog-surround":1353},[4,45,120,158,174,204,234,260,272,288,308,327,340,357,374,387,399,426],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Kezdő lépések","i-lucide-rocket","\u002Fhu\u002Fgetting-started","hu\u002F01.getting-started",[10,15,20,25,30,35,40],{"title":11,"path":12,"stem":13,"icon":14},"Bevezetés","\u002Fhu\u002Fgetting-started\u002Fintroduction","hu\u002F01.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Telepítés","\u002Fhu\u002Fgetting-started\u002Finstallation","hu\u002F01.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Az első modulod","\u002Fhu\u002Fgetting-started\u002Ffirst-module","hu\u002F01.getting-started\u002F3.first-module","i-lucide-package-plus",{"title":26,"path":27,"stem":28,"icon":29},"Projektstruktúra","\u002Fhu\u002Fgetting-started\u002Fproject-structure","hu\u002F01.getting-started\u002F4.project-structure","i-lucide-folder-tree",{"title":31,"path":32,"stem":33,"icon":34},"A shop mintaalkalmazás","\u002Fhu\u002Fgetting-started\u002Fsample-app","hu\u002F01.getting-started\u002F5.sample-app","i-lucide-shopping-cart",{"title":36,"path":37,"stem":38,"icon":39},"Laravelből érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-laravel","hu\u002F01.getting-started\u002F6.coming-from-laravel","i-lucide-arrow-right-left",{"title":41,"path":42,"stem":43,"icon":39},"Symfonyból érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-symfony","hu\u002F01.getting-started\u002F7.coming-from-symfony",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"CLI referencia","i-lucide-terminal","\u002Fhu\u002Fcli","hu\u002F02.cli",[51,55,60,65,70,75,80,85,90,95,100,105,110,115],{"title":52,"path":53,"stem":54,"icon":47},"Áttekintés","\u002Fhu\u002Fcli\u002Foverview","hu\u002F02.cli\u002F1.overview",{"title":56,"path":57,"stem":58,"icon":59},"add compose \u002F add docker","\u002Fhu\u002Fcli\u002Fadd-compose","hu\u002F02.cli\u002F10.add-compose","i-lucide-container",{"title":61,"path":62,"stem":63,"icon":64},"add mail","\u002Fhu\u002Fcli\u002Fadd-mail","hu\u002F02.cli\u002F11.add-mail","i-lucide-mail-plus",{"title":66,"path":67,"stem":68,"icon":69},"add notification","\u002Fhu\u002Fcli\u002Fadd-notification","hu\u002F02.cli\u002F12.add-notification","i-lucide-bell-plus",{"title":71,"path":72,"stem":73,"icon":74},"add realtime","\u002Fhu\u002Fcli\u002Fadd-realtime","hu\u002F02.cli\u002F13.add-realtime","i-lucide-radio-tower",{"title":76,"path":77,"stem":78,"icon":79},"add seeder","\u002Fhu\u002Fcli\u002Fadd-seeder","hu\u002F02.cli\u002F14.add-seeder","i-lucide-sprout",{"title":81,"path":82,"stem":83,"icon":84},"new project","\u002Fhu\u002Fcli\u002Fnew-project","hu\u002F02.cli\u002F2.new-project","i-lucide-folder-plus",{"title":86,"path":87,"stem":88,"icon":89},"new module","\u002Fhu\u002Fcli\u002Fnew-module","hu\u002F02.cli\u002F3.new-module","i-lucide-blocks",{"title":91,"path":92,"stem":93,"icon":94},"add surface","\u002Fhu\u002Fcli\u002Fadd-surface","hu\u002F02.cli\u002F4.add-surface","i-lucide-layers-2",{"title":96,"path":97,"stem":98,"icon":99},"add domain","\u002Fhu\u002Fcli\u002Fadd-domain","hu\u002F02.cli\u002F5.add-domain","i-lucide-box",{"title":101,"path":102,"stem":103,"icon":104},"add handler","\u002Fhu\u002Fcli\u002Fadd-handler","hu\u002F02.cli\u002F6.add-handler","i-lucide-webhook",{"title":106,"path":107,"stem":108,"icon":109},"new migration","\u002Fhu\u002Fcli\u002Fnew-migration","hu\u002F02.cli\u002F7.new-migration","i-lucide-file-plus",{"title":111,"path":112,"stem":113,"icon":114},"worker generátorok","\u002Fhu\u002Fcli\u002Fworker-generators","hu\u002F02.cli\u002F8.worker-generators","i-lucide-cog",{"title":116,"path":117,"stem":118,"icon":119},"add db","\u002Fhu\u002Fcli\u002Fadd-db","hu\u002F02.cli\u002F9.add-db","i-lucide-database-zap",{"title":121,"icon":99,"path":122,"stem":123,"children":124,"page":44},"A framework","\u002Fhu\u002Fframework","hu\u002F03.framework",[125,129,134,139,143,148,153],{"title":126,"path":127,"stem":128,"icon":99},"A framework áttekintése","\u002Fhu\u002Fframework\u002Foverview","hu\u002F03.framework\u002F1.overview",{"title":130,"path":131,"stem":132,"icon":133},"Alkalmazás-életciklus","\u002Fhu\u002Fframework\u002Fapp","hu\u002F03.framework\u002F2.app","i-lucide-power",{"title":135,"path":136,"stem":137,"icon":138},"Szerver","\u002Fhu\u002Fframework\u002Fserver","hu\u002F03.framework\u002F3.server","i-lucide-server",{"title":140,"path":141,"stem":142,"icon":114},"Worker","\u002Fhu\u002Fframework\u002Fworker","hu\u002F03.framework\u002F4.worker",{"title":144,"path":145,"stem":146,"icon":147},"Realtime","\u002Fhu\u002Fframework\u002Frealtime","hu\u002F03.framework\u002F5.realtime","i-lucide-radio",{"title":149,"path":150,"stem":151,"icon":152},"Migrációk","\u002Fhu\u002Fframework\u002Fmigrations","hu\u002F03.framework\u002F6.migrations","i-lucide-file-stack",{"title":154,"path":155,"stem":156,"icon":157},"Social login","\u002Fhu\u002Fframework\u002Fsocial-login","hu\u002F03.framework\u002F7.social-login","i-lucide-log-in",{"title":159,"icon":160,"path":161,"stem":162,"children":163,"page":44},"Referencia","i-lucide-book-open","\u002Fhu\u002Freference","hu\u002F04.reference",[164,169],{"title":165,"path":166,"stem":167,"icon":168},"Konfiguráció","\u002Fhu\u002Freference\u002Fconfiguration","hu\u002F04.reference\u002F1.configuration","i-lucide-settings",{"title":170,"path":171,"stem":172,"icon":173},"Külső függőségek","\u002Fhu\u002Freference\u002Fdependencies","hu\u002F04.reference\u002F2.dependencies","i-lucide-package",{"title":175,"icon":176,"path":177,"stem":178,"children":179,"page":44},"Koncepciók","i-lucide-lightbulb","\u002Fhu\u002Fconcepts","hu\u002F05.concepts",[180,185,190,194,199],{"title":181,"path":182,"stem":183,"icon":184},"Architektúra","\u002Fhu\u002Fconcepts\u002Farchitecture","hu\u002F05.concepts\u002F1.architecture","i-lucide-layers",{"title":186,"path":187,"stem":188,"icon":189},"Hibamodell","\u002Fhu\u002Fconcepts\u002Ferror-model","hu\u002F05.concepts\u002F2.error-model","i-lucide-shield-alert",{"title":165,"path":191,"stem":192,"icon":193},"\u002Fhu\u002Fconcepts\u002Fconfiguration","hu\u002F05.concepts\u002F3.configuration","i-lucide-settings-2",{"title":195,"path":196,"stem":197,"icon":198},"Codegen pipeline","\u002Fhu\u002Fconcepts\u002Fcodegen-pipeline","hu\u002F05.concepts\u002F4.codegen-pipeline","i-lucide-file-json",{"title":200,"path":201,"stem":202,"icon":203},"Design patternek","\u002Fhu\u002Fconcepts\u002Fdesign-patterns","hu\u002F05.concepts\u002F5.design-patterns","i-lucide-puzzle",{"title":205,"icon":206,"path":207,"stem":208,"children":209,"page":44},"auth","i-lucide-shield-check","\u002Fhu\u002Fauth","hu\u002F06.auth",[210,215,220,225,230],{"title":211,"path":212,"stem":213,"icon":214},"Autentikáció","\u002Fhu\u002Fauth\u002Foverview","hu\u002F06.auth\u002F1.overview","i-lucide-key-round",{"title":216,"path":217,"stem":218,"icon":219},"RBAC","\u002Fhu\u002Fauth\u002Frbac","hu\u002F06.auth\u002F2.rbac","i-lucide-users",{"title":221,"path":222,"stem":223,"icon":224},"Policy-k","\u002Fhu\u002Fauth\u002Fpolicy","hu\u002F06.auth\u002F3.policy","i-lucide-gavel",{"title":226,"path":227,"stem":228,"icon":229},"Az auth önálló használata","\u002Fhu\u002Fauth\u002Fstandalone","hu\u002F06.auth\u002F4.standalone","i-lucide-plug",{"title":231,"path":232,"stem":233,"icon":157},"Social login goth-tal, önállóan","\u002Fhu\u002Fauth\u002Fsocial-standalone","hu\u002F06.auth\u002F5.social-standalone",{"title":235,"icon":236,"path":237,"stem":238,"children":239,"page":44},"dbx","i-lucide-database","\u002Fhu\u002Fdbx","hu\u002F07.dbx",[240,243,247,251,256],{"title":52,"path":241,"stem":242,"icon":236},"\u002Fhu\u002Fdbx\u002Foverview","hu\u002F07.dbx\u002F1.overview",{"title":244,"path":245,"stem":246,"icon":229},"pgx","\u002Fhu\u002Fdbx\u002Fpg","hu\u002F07.dbx\u002F2.pg",{"title":248,"path":249,"stem":250,"icon":184},"bun","\u002Fhu\u002Fdbx\u002Fbunx","hu\u002F07.dbx\u002F3.bunx",{"title":252,"path":253,"stem":254,"icon":255},"Tranzakciók","\u002Fhu\u002Fdbx\u002Ftransactions","hu\u002F07.dbx\u002F4.transactions","i-lucide-git-merge",{"title":257,"path":258,"stem":259,"icon":79},"Seederek","\u002Fhu\u002Fdbx\u002Fseed","hu\u002F07.dbx\u002F5.seed",{"title":261,"icon":193,"path":262,"stem":263,"children":264,"page":44},"envconf","\u002Fhu\u002Fenvconf","hu\u002F08.envconf",[265,268],{"title":52,"path":266,"stem":267,"icon":193},"\u002Fhu\u002Fenvconf\u002Foverview","hu\u002F08.envconf\u002F1.overview",{"title":269,"path":270,"stem":271,"icon":193},"Receptek","\u002Fhu\u002Fenvconf\u002Frecipes","hu\u002F08.envconf\u002F2.recipes",{"title":273,"icon":189,"path":274,"stem":275,"children":276,"page":44},"errs","\u002Fhu\u002Ferrs","hu\u002F09.errs",[277,280,284],{"title":52,"path":278,"stem":279,"icon":189},"\u002Fhu\u002Ferrs\u002Foverview","hu\u002F09.errs\u002F1.overview",{"title":281,"path":282,"stem":283,"icon":189},"API","\u002Fhu\u002Ferrs\u002Fapi","hu\u002F09.errs\u002F2.api",{"title":285,"path":286,"stem":287,"icon":189},"Integráció","\u002Fhu\u002Ferrs\u002Fintegration","hu\u002F09.errs\u002F3.integration",{"title":289,"icon":290,"path":291,"stem":292,"children":293,"page":44},"events","i-lucide-workflow","\u002Fhu\u002Fevents","hu\u002F10.events",[294,298,303],{"title":295,"path":296,"stem":297,"icon":147},"Események","\u002Fhu\u002Fevents\u002Foverview","hu\u002F10.events\u002F1.overview",{"title":299,"path":300,"stem":301,"icon":302},"Outbox","\u002Fhu\u002Fevents\u002Foutbox","hu\u002F10.events\u002F2.outbox","i-lucide-inbox",{"title":304,"path":305,"stem":306,"icon":307},"Ütemezés","\u002Fhu\u002Fevents\u002Fscheduler","hu\u002F10.events\u002F3.scheduler","i-lucide-calendar-clock",{"title":309,"icon":310,"path":311,"stem":312,"children":313,"page":44},"httperr","i-lucide-globe","\u002Fhu\u002Fhttperr","hu\u002F11.httperr",[314,317,322],{"title":52,"path":315,"stem":316,"icon":310},"\u002Fhu\u002Fhttperr\u002Foverview","hu\u002F11.httperr\u002F1.overview",{"title":318,"path":319,"stem":320,"icon":321},"Hibaválaszok","\u002Fhu\u002Fhttperr\u002Ferror-responses","hu\u002F11.httperr\u002F2.error-responses","i-lucide-octagon-alert",{"title":323,"path":324,"stem":325,"icon":326},"Validáció","\u002Fhu\u002Fhttperr\u002Fvalidation","hu\u002F11.httperr\u002F3.validation","i-lucide-badge-check",{"title":328,"icon":329,"path":330,"stem":331,"children":332,"page":44},"logx","i-lucide-scroll-text","\u002Fhu\u002Flogx","hu\u002F12.logx",[333,336],{"title":52,"path":334,"stem":335,"icon":329},"\u002Fhu\u002Flogx\u002Foverview","hu\u002F12.logx\u002F1.overview",{"title":337,"path":338,"stem":339,"icon":47},"Monolog-formázó","\u002Fhu\u002Flogx\u002Fmonolog","hu\u002F12.logx\u002F2.monolog",{"title":341,"icon":342,"path":343,"stem":344,"children":345,"page":44},"mail","i-lucide-mail","\u002Fhu\u002Fmail","hu\u002F13.mail",[346,349,353],{"title":52,"path":347,"stem":348,"icon":342},"\u002Fhu\u002Fmail\u002Foverview","hu\u002F13.mail\u002F1.overview",{"title":350,"path":351,"stem":352,"icon":342},"SMTP","\u002Fhu\u002Fmail\u002Fsmtp","hu\u002F13.mail\u002F2.smtp",{"title":354,"path":355,"stem":356,"icon":342},"MJML","\u002Fhu\u002Fmail\u002Fmjml","hu\u002F13.mail\u002F3.mjml",{"title":358,"icon":359,"path":360,"stem":361,"children":362,"page":44},"notify","i-lucide-bell","\u002Fhu\u002Fnotify","hu\u002F14.notify",[363,366,370],{"title":52,"path":364,"stem":365,"icon":359},"\u002Fhu\u002Fnotify\u002Foverview","hu\u002F14.notify\u002F1.overview",{"title":367,"path":368,"stem":369,"icon":359},"Database csatorna","\u002Fhu\u002Fnotify\u002Fdatabase","hu\u002F14.notify\u002F2.database",{"title":371,"path":372,"stem":373,"icon":359},"Broadcast csatorna","\u002Fhu\u002Fnotify\u002Fbroadcast","hu\u002F14.notify\u002F3.broadcast",{"title":375,"icon":376,"path":377,"stem":378,"children":379,"page":44},"paginate","i-lucide-list-ordered","\u002Fhu\u002Fpaginate","hu\u002F15.paginate",[380,383],{"title":52,"path":381,"stem":382,"icon":376},"\u002Fhu\u002Fpaginate\u002Foverview","hu\u002F15.paginate\u002F1.overview",{"title":384,"path":385,"stem":386,"icon":39},"Cursor-lapozás","\u002Fhu\u002Fpaginate\u002Fcursor","hu\u002F15.paginate\u002F2.cursor",{"title":388,"icon":184,"path":389,"stem":390,"children":391,"page":44},"queue","\u002Fhu\u002Fqueue","hu\u002F16.queue",[392,395],{"title":52,"path":393,"stem":394,"icon":376},"\u002Fhu\u002Fqueue\u002Foverview","hu\u002F16.queue\u002F1.overview",{"title":396,"path":397,"stem":398,"icon":184},"Taskok","\u002Fhu\u002Fqueue\u002Ftasks","hu\u002F16.queue\u002F2.tasks",{"title":400,"icon":401,"path":402,"stem":403,"children":404,"page":44},"storage","i-lucide-hard-drive","\u002Fhu\u002Fstorage","hu\u002F17.storage",[405,408,412,416,421],{"title":52,"path":406,"stem":407,"icon":401},"\u002Fhu\u002Fstorage\u002Foverview","hu\u002F17.storage\u002F1.overview",{"title":409,"path":410,"stem":411,"icon":401},"Disk API","\u002Fhu\u002Fstorage\u002Fdisk-api","hu\u002F17.storage\u002F2.disk-api",{"title":413,"path":414,"stem":415,"icon":401},"Memória és helyi lemez","\u002Fhu\u002Fstorage\u002Flocal","hu\u002F17.storage\u002F3.local",{"title":417,"path":418,"stem":419,"icon":420},"S3","\u002Fhu\u002Fstorage\u002Fs3","hu\u002F17.storage\u002F4.s3","i-lucide-cloud",{"title":422,"path":423,"stem":424,"icon":425},"Tesztelés","\u002Fhu\u002Fstorage\u002Ftesting","hu\u002F17.storage\u002F5.testing","i-lucide-flask-conical",{"title":427,"icon":428,"path":429,"stem":430,"children":431,"page":44},"telemetry","i-lucide-activity","\u002Fhu\u002Ftelemetry","hu\u002F18.telemetry",[432,435,439,444],{"title":52,"path":433,"stem":434,"icon":428},"\u002Fhu\u002Ftelemetry\u002Foverview","hu\u002F18.telemetry\u002F1.overview",{"title":436,"path":437,"stem":438,"icon":329},"Logolás","\u002Fhu\u002Ftelemetry\u002Flogging","hu\u002F18.telemetry\u002F2.logging",{"title":440,"path":441,"stem":442,"icon":443},"OpenTelemetry","\u002Fhu\u002Ftelemetry\u002Fopentelemetry","hu\u002F18.telemetry\u002F3.opentelemetry","i-lucide-radar",{"title":445,"path":446,"stem":447,"icon":448},"Sentry","\u002Fhu\u002Ftelemetry\u002Fsentry","hu\u002F18.telemetry\u002F4.sentry","i-lucide-bug",{"id":450,"title":337,"body":451,"description":1346,"extension":1347,"links":1348,"meta":1349,"navigation":1350,"path":338,"seo":1351,"stem":339,"__hash__":1352},"docs_hu\u002Fhu\u002F12.logx\u002F2.monolog.md",{"type":452,"value":453,"toc":1338},"minimark",[454,474,479,497,507,513,519,522,604,608,611,703,725,776,780,806,1067,1078,1082,1114,1121,1125,1132,1298,1302,1334],[455,456,457,458,462,463,466,467,470,471,473],"p",{},"Go-ban az első hideg zuhany gyakran a logolás: a nyers ",[459,460,461],"code",{},"log"," csomag egysoros, kontextus nélküli kimenete, vagy egy strukturált logger ",[459,464,465],{},"key=value"," fala, amiben egy stack trace egyetlen escape-elt stringgé lapul. A ",[459,468,469],{},"logx\u002Fmonolog"," a ",[459,472,328],{}," válasza erre fejlesztés közben: egy konzol-handler, ami aktív formátumként beállítva pontosan úgy néz ki, mint amit PHP-ból ismersz.",[475,476,478],"h2",{"id":477},"így-néz-ki","Így néz ki",[455,480,481,482,485,486,489,490,493,494,496],{},"Állítsd be a ",[459,483,484],{},"Format: \"monolog\"","-ot a ",[459,487,488],{},"logx.Config","-on (vagy a ",[459,491,492],{},"LOG_FORMAT=monolog","-ot, ha a ",[459,495,488],{}," a környezetből töltődik), és a konzol így ír:",[498,499,505],"pre",{"className":500,"code":502,"language":503,"meta":504},[501],"language-text","[2026-07-15 10:23:44] shop.INFO: order placed {\"order_id\":\"o_8412\",\"total\":12990}\n[2026-07-15 10:23:45] shop.WARNING: payment provider slow, retrying {\"attempt\":2,\"provider\":\"stripe\"} in \u002Fhome\u002Fyou\u002Fshop\u002Finternal\u002Fmodules\u002Fshop\u002Fsurfaces\u002Fapi\u002Fservice\u002Fpayments.go:114\n","text","",[459,506,502],{"__ignoreMap":504},[455,508,509,510,512],{},"És amikor egy becsomagolt ",[459,511,273],{}," hiba éri el a loggert:",[498,514,517],{"className":515,"code":516,"language":503,"meta":504},[501],"[2026-07-15 10:23:46] shop.ERROR: request failed: shop_out_of_stock: shop: place order: inventory: decrement: insufficient stock {\"code\":\"shop_out_of_stock\",\"method\":\"POST\",\"path\":\"\u002Fapi\u002Fv1\u002Fshop\u002Forders\",\"status\":500}\nStack trace:\n#0 \u002Fhome\u002Fyou\u002Fshop\u002Finternal\u002Fmodules\u002Fshop\u002Frepository\u002Finventory.go(87): repository.(*InventoryRepository).Decrement()\n#1 \u002Fhome\u002Fyou\u002Fshop\u002Finternal\u002Fmodules\u002Fshop\u002Forders.go(41): shop.(*Service).PlaceOrder()\n#2 \u002Fhome\u002Fyou\u002Fshop\u002Finternal\u002Fmodules\u002Fshop\u002Fsurfaces\u002Fapi\u002Fservice\u002Forders.go(52): service.(*OrderService).PlaceOrder()\n#3 \u002Fhome\u002Fyou\u002Fshop\u002Finternal\u002Fmodules\u002Fshop\u002Fsurfaces\u002Fapi\u002Fhttp\u002Fhandlers.go(61): http.(*Handler).PlaceOrder()\n#4 {main}\n",[459,518,516],{"__ignoreMap":504},[455,520,521],{},"Ami ebben a pár sorban dolgozik:",[523,524,525,541,554,564,574,587],"ul",{},[526,527,528,532,533,536,537,540],"li",{},[529,530,531],"strong",{},"A channel nevezi meg a rekord forrását"," (jellemzően egy service nevét), több service logját egymás mellett futtatva is látod, ki beszél. A ",[459,534,535],{},"WARN"," szint Monolog-hűen ",[459,538,539],{},"WARNING","-ként jelenik meg.",[526,542,543,549,550,553],{},[529,544,545,546,548],{},"A hiba fejléce a ",[459,547,273],{},"-kóddal kezdődik"," (",[459,551,552],{},"shop_out_of_stock: ...","), így a hibamód a JSON-rész elolvasása nélkül azonosítható; a kód a JSON contextben is ott van.",[526,555,556,559,560,563],{},[529,557,558],{},"A stack trace teljes, abszolút útvonalakkal",": a legtöbb terminál és editor kattinthatóvá teszi. A frame-ek a hiba keletkezési pontjától felfelé sorakoznak; a dependency-kből (Go module cache-ből) jövő frame-ek halványítva jelennek meg, a runtime-belépési frame-eket a ",[459,561,562],{},"{main}"," zárósor helyettesíti.",[526,565,566,569,570,573],{},[529,567,568],{},"A hiba-attr nem duplázódik",": a ",[459,571,572],{},"slog.Any(\"error\", err)"," értéke a fejlécbe és a stack-blokkba kerül, a JSON contextből kimarad.",[526,575,576,569,579,582,583,586],{},[529,577,578],{},"Szín csak terminálon",[459,580,581],{},"NO_COLOR","-t és a ",[459,584,585],{},"TERM=dumb","-ot tiszteletben tartja, pipe-olt kimenetben nincs escape-szemét.",[526,588,589,590,592,593,596,597,599,600,603],{},"Egy ",[459,591,535],{},"\u002F",[459,594,595],{},"ERROR"," rekord ",[459,598,273],{}," stack nélkül is kap lokációt: a hívási helye kerül a sor végére ",[459,601,602],{}," in file:line"," formában.",[475,605,607],{"id":606},"logxmonolog-közelről","logx\u002Fmonolog közelről",[455,609,610],{},"A formátum-driver önálló csomag, egyetlen konstruktorral:",[498,612,616],{"className":613,"code":614,"language":615,"meta":504,"style":504},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import \"github.com\u002Fgp-system\u002Flogx\u002Fmonolog\"\n\nfunc NewHandler(w io.Writer, level slog.Level, channel string) *Handler\n","go",[459,617,618,638,645],{"__ignoreMap":504},[619,620,623,627,631,635],"span",{"class":621,"line":622},"line",1,[619,624,626],{"class":625},"s7zQu","import",[619,628,630],{"class":629},"sMK4o"," \"",[619,632,634],{"class":633},"sBMFI","github.com\u002Fgp-system\u002Flogx\u002Fmonolog",[619,636,637],{"class":629},"\"\n",[619,639,641],{"class":621,"line":640},2,[619,642,644],{"emptyLinePlaceholder":643},true,"\n",[619,646,648,651,655,658,662,665,668,671,674,677,680,682,685,687,690,694,697,700],{"class":621,"line":647},3,[619,649,650],{"class":629},"func",[619,652,654],{"class":653},"s2Zo4"," NewHandler",[619,656,657],{"class":629},"(",[619,659,661],{"class":660},"sHdIc","w",[619,663,664],{"class":633}," io",[619,666,667],{"class":629},".",[619,669,670],{"class":633},"Writer",[619,672,673],{"class":629},",",[619,675,676],{"class":660}," level",[619,678,679],{"class":633}," slog",[619,681,667],{"class":629},[619,683,684],{"class":633},"Level",[619,686,673],{"class":629},[619,688,689],{"class":660}," channel",[619,691,693],{"class":692},"spNyl"," string",[619,695,696],{"class":629},")",[619,698,699],{"class":629}," *",[619,701,702],{"class":633},"Handler\n",[455,704,705,706,709,710,713,714,717,718,721,722,724],{},"A ",[459,707,708],{},"logx.ConsoleHandler"," ezt adja vissza, ha a ",[459,711,712],{},"Config.Format"," ",[459,715,716],{},"\"monolog\"",", de bárhova bekötheted, ahol egy ",[459,719,720],{},"slog.Handler"," elvárt, a ",[459,723,328],{}," többi részével vagy anélkül. Amit érdemes tudni róla:",[523,726,727,748,770],{},[526,728,729,735,736,739,740,743,744,747],{},[529,730,731,734],{},[459,732,733],{},"slog","-natív."," A ",[459,737,738],{},"With(...)"," attr-ok és a ",[459,741,742],{},"WithGroup(...)"," csoportok helyesen, beágyazott JSON-ként jelennek meg a context-részben (",[459,745,746],{},"\"req\":{\"status\":200}",").",[526,749,750,755,756,761,762,765,766,769],{},[529,751,752,753,667],{},"A stackek forrása az ",[459,754,273],{}," A handler a rekord első hiba-értékű attr-ját emeli ki; ha az (vagy a wrap-láncában bármi) ",[757,758,759],"a",{"href":278},[459,760,273],{}," hiba, az ",[459,763,764],{},"errs.FullFrames"," teljes útvonalú stackje renderelődik. Egy sima ",[459,767,768],{},"errors.New"," hibánál nincs stack-blokk: helyette a log hívási helye kerül a sorba.",[526,771,772,775],{},[529,773,774],{},"Párhuzamos futásban is atomi sorok",": a handler klónjai közös mutexen írnak, torn write nincs.",[475,777,779],{"id":778},"strukturált-hibák-a-logban-errs-nélkül-semmi-ilyen-nincs","Strukturált hibák a logban: errs nélkül semmi ilyen nincs",[455,781,782,783,787,788,791,792,795,796,799,800,802,803,805],{},"A fenti stack trace-eket az ",[757,784,785],{"href":278},[459,786,273],{}," hibákból nyeri, és ez nem konzol-privilégium: az ",[459,789,790],{},"*errs.Error"," implementálja a ",[459,793,794],{},"slog.LogValuer","-t, így ",[529,797,798],{},"bármely"," strukturált ",[459,801,720],{},"-ben, nemcsak a ",[459,804,469],{},"-ban, a hiba csoportként bomlik ki:",[498,807,811],{"className":808,"code":809,"language":810,"meta":504,"style":504},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"error\": {\n  \"msg\": \"shop: place order: inventory: decrement: insufficient stock\",\n  \"code\": \"shop_out_of_stock\",\n  \"public\": \"Egy vagy több tétel nincs elegendő készleten.\",\n  \"chain\": [ { \"msg\": \"shop: place order\", \"file\": \"service\u002Forders.go\", \"line\": 52, \"...\" : \"…\" }, \"…\" ],\n  \"stack\": [ { \"file\": \"repository\u002Finventory.go\", \"line\": 87, \"...\" : \"…\" }, \"…\" ]\n}\n","json",[459,812,813,831,854,873,894,990,1061],{"__ignoreMap":504},[619,814,815,818,822,824,828],{"class":621,"line":622},[619,816,817],{"class":629},"\"",[619,819,821],{"class":820},"sfazB","error",[619,823,817],{"class":629},[619,825,827],{"class":826},"sTEyZ",": ",[619,829,830],{"class":629},"{\n",[619,832,833,836,839,841,844,846,849,851],{"class":621,"line":640},[619,834,835],{"class":629},"  \"",[619,837,838],{"class":692},"msg",[619,840,817],{"class":629},[619,842,843],{"class":629},":",[619,845,630],{"class":629},[619,847,848],{"class":820},"shop: place order: inventory: decrement: insufficient stock",[619,850,817],{"class":629},[619,852,853],{"class":629},",\n",[619,855,856,858,860,862,864,866,869,871],{"class":621,"line":647},[619,857,835],{"class":629},[619,859,459],{"class":692},[619,861,817],{"class":629},[619,863,843],{"class":629},[619,865,630],{"class":629},[619,867,868],{"class":820},"shop_out_of_stock",[619,870,817],{"class":629},[619,872,853],{"class":629},[619,874,876,878,881,883,885,887,890,892],{"class":621,"line":875},4,[619,877,835],{"class":629},[619,879,880],{"class":692},"public",[619,882,817],{"class":629},[619,884,843],{"class":629},[619,886,630],{"class":629},[619,888,889],{"class":820},"Egy vagy több tétel nincs elegendő készleten.",[619,891,817],{"class":629},[619,893,853],{"class":629},[619,895,897,899,902,904,906,909,912,914,916,918,920,922,925,927,929,931,934,936,938,940,943,945,947,949,951,953,955,959,961,963,966,968,971,973,976,978,981,983,985,987],{"class":621,"line":896},5,[619,898,835],{"class":629},[619,900,901],{"class":692},"chain",[619,903,817],{"class":629},[619,905,843],{"class":629},[619,907,908],{"class":629}," [",[619,910,911],{"class":629}," {",[619,913,630],{"class":629},[619,915,838],{"class":633},[619,917,817],{"class":629},[619,919,843],{"class":629},[619,921,630],{"class":629},[619,923,924],{"class":820},"shop: place order",[619,926,817],{"class":629},[619,928,673],{"class":629},[619,930,630],{"class":629},[619,932,933],{"class":633},"file",[619,935,817],{"class":629},[619,937,843],{"class":629},[619,939,630],{"class":629},[619,941,942],{"class":820},"service\u002Forders.go",[619,944,817],{"class":629},[619,946,673],{"class":629},[619,948,630],{"class":629},[619,950,621],{"class":633},[619,952,817],{"class":629},[619,954,843],{"class":629},[619,956,958],{"class":957},"sbssI"," 52",[619,960,673],{"class":629},[619,962,630],{"class":629},[619,964,965],{"class":633},"...",[619,967,817],{"class":629},[619,969,970],{"class":629}," :",[619,972,630],{"class":629},[619,974,975],{"class":820},"…",[619,977,817],{"class":629},[619,979,980],{"class":629}," },",[619,982,630],{"class":629},[619,984,975],{"class":820},[619,986,817],{"class":629},[619,988,989],{"class":629}," ],\n",[619,991,993,995,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1019,1021,1023,1025,1027,1029,1031,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058],{"class":621,"line":992},6,[619,994,835],{"class":629},[619,996,997],{"class":692},"stack",[619,999,817],{"class":629},[619,1001,843],{"class":629},[619,1003,908],{"class":629},[619,1005,911],{"class":629},[619,1007,630],{"class":629},[619,1009,933],{"class":633},[619,1011,817],{"class":629},[619,1013,843],{"class":629},[619,1015,630],{"class":629},[619,1017,1018],{"class":820},"repository\u002Finventory.go",[619,1020,817],{"class":629},[619,1022,673],{"class":629},[619,1024,630],{"class":629},[619,1026,621],{"class":633},[619,1028,817],{"class":629},[619,1030,843],{"class":629},[619,1032,1033],{"class":957}," 87",[619,1035,673],{"class":629},[619,1037,630],{"class":629},[619,1039,965],{"class":633},[619,1041,817],{"class":629},[619,1043,970],{"class":629},[619,1045,630],{"class":629},[619,1047,975],{"class":820},[619,1049,817],{"class":629},[619,1051,980],{"class":629},[619,1053,630],{"class":629},[619,1055,975],{"class":820},[619,1057,817],{"class":629},[619,1059,1060],{"class":629}," ]\n",[619,1062,1064],{"class":621,"line":1063},7,[619,1065,1066],{"class":629},"}\n",[455,1068,1069,1070,1073,1074,1077],{},"Ugyanaz a hiba tehát dev konzolon PHP-stílusú stack trace, és gépi feldolgozásra kész JSON bármely más handlerben, amibe fanoutolod (a framework OTel log-bridge-e és Sentry-handlere is köztük van, lásd ",[757,1071,1072],{"href":437},"Telemetry: Logolás","), mindez egyetlen ",[459,1075,1076],{},"return err","-ből.",[475,1079,1081],{"id":1080},"hova-lettek-a-fájl-logok","Hova lettek a fájl-logok?",[455,1083,1084,1085,592,1088,1091,1092,1094,1095,1098,1099,1102,1103,1109,1110,1113],{},"Sehova, és ez szándékos: nincs itt ",[459,1086,1087],{},"single",[459,1089,1090],{},"daily"," file driver, a ",[459,1093,469],{}," arra az ",[459,1096,1097],{},"io.Writer","-re ír, amit a ",[459,1100,1101],{},"NewHandler","-nek átadsz, jellemzően stdoutra. Ez a ",[757,1104,1108],{"href":1105,"rel":1106},"https:\u002F\u002F12factor.net\u002Flogs",[1107],"nofollow","12-factor"," elvet követi: a logok ",[529,1111,1112],{},"eseményfolyamként a stdout-ra"," mennek, a gyűjtés-forgatás-őrzés pedig a platform dolga, nem a loggeré. Konténerben a runtime úgyis elkapja a stdout-ot; egy collector, vagy egy sima shell-redirect, viszi tovább onnantól.",[455,1115,1116,1117,1120],{},"Ha lokálisan mégis fájlba akarod fogni: ",[459,1118,1119],{},"go run .\u002Fcmd\u002Fmyapp 2>&1 | tee myapp.log","; pipe-ban a handler automatikusan színek nélkül ír.",[475,1122,1124],{"id":1123},"monolog-fogalmak-megfelelői","Monolog-fogalmak megfelelői",[455,1126,1127,1128,1131],{},"Ha a ",[459,1129,1130],{},"config\u002Flogging.php"," felől érkezel, így képződnek le a fogalmak:",[1133,1134,1135,1151],"table",{},[1136,1137,1138],"thead",{},[1139,1140,1141,1145,1148],"tr",{},[1142,1143,1144],"th",{},"Monolog",[1142,1146,1147],{},"gpsystem",[1142,1149,1150],{},"Hol",[1152,1153,1154,1181,1198,1216,1232,1256,1271,1285],"tbody",{},[1139,1155,1156,1160,1174],{},[1157,1158,1159],"td",{},"channel neve",[1157,1161,1162,1163,1166,1167,1169,1170,1173],{},"amit ",[459,1164,1165],{},"channel","-ként átadsz a ",[459,1168,1101],{},"-nek (a framework az ",[459,1171,1172],{},"OTEL_SERVICE_NAME","-et használja)",[1157,1175,1176,1177,1180],{},"a monolog-sor ",[459,1178,1179],{},"shop.INFO"," része",[1139,1182,1183,1188,1193],{},[1157,1184,1185,1187],{},[459,1186,997],{}," driver (több channel egyben)",[1157,1189,1190],{},[459,1191,1192],{},"logx.Fanout",[1157,1194,1195],{},[757,1196,1197],{"href":334},"logx: Áttekintés",[1139,1199,1200,1207,1212],{},[1157,1201,1202,1203,1206],{},"channel ",[459,1204,1205],{},"level"," küszöb",[1157,1208,1209],{},[459,1210,1211],{},"logx.LevelFilter",[1157,1213,1214],{},[757,1215,1197],{"href":334},[1139,1217,1218,1226,1229],{},[1157,1219,1220,1222,1223,1225],{},[459,1221,1087],{}," \u002F ",[459,1224,1090],{}," file driver",[1157,1227,1228],{},"nincs (stdout az egyetlen cél)",[1157,1230,1231],{},"lásd fentebb",[1139,1233,1234,1241,1252],{},[1157,1235,1236,1237,1240],{},"formatter (",[459,1238,1239],{},"LineFormatter",", JSON)",[1157,1242,1243,549,1246,1222,1249,696],{},[459,1244,1245],{},"logx.Config.Format",[459,1247,1248],{},"auto",[459,1250,1251],{},"monolog",[1157,1253,1254],{},[757,1255,1197],{"href":334},[1139,1257,1258,1263,1268],{},[1157,1259,1260],{},[459,1261,1262],{},"Log::info('msg', ['ctx' => ...])",[1157,1264,1265],{},[459,1266,1267],{},"slog.InfoContext(ctx, \"msg\", slog.Any(\"ctx\", ...))",[1157,1269,1270],{},"app-kód",[1139,1272,1273,1278,1283],{},[1157,1274,1275],{},[459,1276,1277],{},"Log::withContext([...])",[1157,1279,1280],{},[459,1281,1282],{},"logger := slog.Default().With(...)",[1157,1284,1270],{},[1139,1286,1287,1290,1293],{},[1157,1288,1289],{},"Sentry \u002F Slack channel a stackben",[1157,1291,1292],{},"egy másik handler a fanoutban",[1157,1294,1295,1296],{},"a saját wiringed, vagy a framework fanoutja, lásd ",[757,1297,1072],{"href":437},[475,1299,1301],{"id":1300},"kapcsolódó-oldalak","Kapcsolódó oldalak",[523,1303,1304,1323,1329],{},[526,1305,1306,1308,1309,1312,1313,592,1316,592,1319,1322],{},[757,1307,1197],{"href":334},": telepítés, ",[459,1310,1311],{},"Config",", és a ",[459,1314,1315],{},"ConsoleHandler",[459,1317,1318],{},"LevelFilter",[459,1320,1321],{},"Fanout"," kompozíció, amibe ez a formázó bekapcsolódik.",[526,1324,1325,1328],{},[757,1326,1327],{"href":278},"errs: Áttekintés",": a hibatípus, amiből ennek a formázónak a stack trace-ei jönnek.",[526,1330,1331,1333],{},[757,1332,1072],{"href":437},": hogyan fanoutolja a framework ezt a handlert az OTel log-bridge és a Sentry capture handler mellé.",[1335,1336,1337],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":504,"searchDepth":640,"depth":640,"links":1339},[1340,1341,1342,1343,1344,1345],{"id":477,"depth":640,"text":478},{"id":606,"depth":640,"text":607},{"id":778,"depth":640,"text":779},{"id":1080,"depth":640,"text":1081},{"id":1123,"depth":640,"text":1124},{"id":1300,"depth":640,"text":1301},"Egy PHP\u002FMonolog-stílusú konzol-formázó, egy errs hibából kinyert, teljes útvonalú stack trace-szel.","md",null,{},{"icon":47},{"title":337,"description":1346},"zYUqqCIGkV0UYLbt8e7K1btFjaYuwro7pweMAihhm4w",[1354,1356],{"title":52,"path":334,"stem":335,"description":1355,"icon":329,"children":-1},"Önálló slog-kompozíció (konzolformátum, szintszűrés, fanout), plusz egy PHP\u002FMonolog-stílusú konzol-formázó.",{"title":52,"path":347,"stem":348,"description":1357,"icon":342,"children":-1},"Email-küldés: fluent Message builder, MJML template-ek, memória-mailer a tesztekhez.",1787346797423]