[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-th-1-1-all-js2go-ep27-logging-javascript-vs-go-all--*":3,"academy-blog-translations-8nnsl5wecthzmpo":79},{"data":4,"page":78,"perPage":78,"totalItems":78,"totalPages":78},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":72,"keywords":73,"locale":49,"published_at":74,"scheduled_at":13,"school_blog":70,"short_description":75,"slug":76,"status":68,"title":6,"updated":77,"updated_by":13,"views":71},"JS2GO EP.27 การทำ Logging: JavaScript vs Go","sclblg987654321","school_blog_translations","\u003Cp>การทำ Logging เป็นส่วนสำคัญของการพัฒนาโปรแกรม ไม่ว่าจะเป็นการ debug, monitor, หรือ track ปัญหาใน production การจัดการ log อย่างถูกต้องช่วยให้คุณสามารถติดตามเหตุการณ์ในโค้ด วิเคราะห์ปัญหา และแก้ไขได้อย่างรวดเร็ว บทความนี้จะสอนวิธีการทำ Logging ใน JavaScript (Node.js) และ Go พร้อมตัวอย่างโค้ดและแนวทางปฏิบัติที่ดีที่สุด\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>1. Logging ใน JavaScript (Node.js)\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>JavaScript มี object \u003Ccode inline=\"\">console\u003C\u002Fcode> สำหรับ logging พื้นฐาน แต่ใน production ควรใช้ library เช่น Winston หรือ Pino เพื่อจัดการ log อย่างมืออาชีพ\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ตัวอย่าง Logging พื้นฐานด้วย console\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-javascript\">console.log(\"Informational message\");\nconsole.warn(\"Warning message\");\nconsole.error(\"Error message\");\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ตัวอย่าง Logging ด้วย Winston\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-javascript\">const winston = require('winston');\n\nconst logger = winston.createLogger({\n  level: 'info',\n  format: winston.format.combine(\n      winston.format.timestamp(),\n      winston.format.json()\n  ),\n  transports: [\n    new winston.transports.Console(),\n    new winston.transports.File({ filename: 'app.log' })\n  ]\n});\n\nlogger.info('Server started');\nlogger.warn('Low disk space');\nlogger.error('Database connection failed');\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ข้อดีของ JavaScript Logging\u003C\u002Fh3>\u003Cp>✔️ ใช้งานง่ายและมี ecosystem ขนาดใหญ่\u003Cbr>✔️ รองรับ log levels, timestamp, และ file output\u003Cbr>✔️ สามารถ integrate กับ monitoring tools เช่น Loggly, Datadog\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ข้อจำกัด\u003C\u002Fh3>\u003Cp>⚠️ การใช้ \u003Ccode inline=\"\">console.log\u003C\u002Fcode> ใน production จะไม่มี level control\u003Cbr>⚠️ ต้องใช้ library เพิ่มเติมเพื่อจัดการ production logging\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>2. Logging ใน Go\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>Go มี log package built-in สำหรับ logging พื้นฐาน และ library เสริม เช่น Logrus หรือ Zap สำหรับ production-ready structured logging\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ตัวอย่าง Logging พื้นฐานด้วย log\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">package main\n\nimport (\n    \"log\"\n)\n\nfunc main() {\n    log.Println(\"Informational message\")\n    log.Println(\"Warning message\")\n    log.Println(\"Error message\")\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ตัวอย่าง Logging ด้วย Logrus\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">package main\n\nimport (\n    log \"github.com\u002Fsirupsen\u002Flogrus\"\n)\n\nfunc main() {\n    log.SetFormatter(&amp;log.JSONFormatter{})\n    log.SetLevel(log.InfoLevel)\n\n    log.Info(\"Server started\")\n    log.Warn(\"Low disk space\")\n    log.Error(\"Database connection failed\")\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ข้อดีของ Go Logging\u003C\u002Fh3>\u003Cp>✔️ Type-safe และ compile-time error checking\u003Cbr>✔️ รองรับ structured logging (JSON)\u003Cbr>✔️ รองรับ log levels, file output, และ integration กับ monitoring\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ข้อจำกัด\u003C\u002Fh3>\u003Cp>⚠️ Syntax verbose กว่า JavaScript\u003Cbr>⚠️ ต้อง import library เสริมเพื่อ structured logging\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>3. แนวทางปฏิบัติที่เหมาะสม\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>✔️ กำหนด log levels ให้ชัดเจน: Info \u002F Warn \u002F Error \u002F Debug\u003Cbr>✔️ ใช้ timestamp และ context ใน log เพื่อวิเคราะห์ปัญหาใน production\u003Cbr>✔️ แยก log file ตาม environment:\u003C\u002Fp>\u003Cul>\u003Cli>development: console\u003C\u002Fli>\u003Cli>production: file \u002F remote logging\u003Cbr>✔️ ใช้ structured logging (JSON format) เพื่อให้อ่านและ parse ง่าย\u003Cbr>✔️ หลีกเลี่ยงการ log ข้อมูล sensitive เช่น password, token, personal data\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Chr>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>4. สรุปเปรียบเทียบ Logging JavaScript vs Go\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cfigure class=\"table\">\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Feature\u003C\u002Fth>\u003Cth>JavaScript\u003C\u002Fth>\u003Cth>Go\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Built-in\u003C\u002Ftd>\u003Ctd>console\u003C\u002Ftd>\u003Ctd>log\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Library\u003C\u002Ftd>\u003Ctd>winston, pino\u003C\u002Ftd>\u003Ctd>logrus, zap\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Levels\u003C\u002Ftd>\u003Ctd>info, warn, error\u003C\u002Ftd>\u003Ctd>Info, Warn, Error, Debug\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Format\u003C\u002Ftd>\u003Ctd>plain text \u002F JSON\u003C\u002Ftd>\u003Ctd>plain text \u002F JSON\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Structured logging\u003C\u002Ftd>\u003Ctd>✔️ (library)\u003C\u002Ftd>\u003Ctd>✔️ (library)\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Type safety\u003C\u002Ftd>\u003Ctd>❌ No\u003C\u002Ftd>\u003Ctd>✔️ Yes\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Production-ready\u003C\u002Ftd>\u003Ctd>ต้องใช้ library\u003C\u002Ftd>\u003Ctd>library หรือ built-in log\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>คำแนะนำ:\u003C\u002Fh3>\u003Cp>✔️ Web apps \u002F frontend-heavy apps → ใช้ Node.js + Winston\u002FPino\u003Cbr>✔️ Backend \u002F server \u002F microservices → ใช้ Go + Logrus\u002FZap\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>ตอนต่อไป\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ใน EP.28 ของซีรีส์ JS2GO เราจะพาคุณไปเรียนรู้ การจัดการ Errors เชิงลึก: Stack Trace และ Logging เพื่อให้คุณสามารถ debug และวิเคราะห์ปัญหาในระบบได้อย่างมืออาชีพ\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>\u003Cstrong>อ่านบทความ Series อื่นๆ\u003C\u002Fstrong>\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002Fblogs\u002Fcategories\u002FGolang\">\u003Cstrong>Golang The Series\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fli>\u003Cli>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002Fblogs\u002Fcategories\u002FJS2GO\">\u003Cstrong>JS2GO\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fli>\u003Cli>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002Fblogs\u002Fcategories\u002FTailwind%20CSS\">\u003Cstrong>10 Ep ที่จะให้คุณเป็นมือโปร Tailwind CSS ในชั่วข้ามคืน\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>\u003Cstrong>🔵 Facebook: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.academy.th\">\u003Cstrong>https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.academy.th\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>🔴 YouTube : \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUC2eI2RxcA2zbTqZyHyWIfRg\">\u003Cstrong>Superdev Academy\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>📸 Instagram: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.instagram.com\u002Fsuperdevschool\u002F\">\u003Cstrong>Superdev Academy\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>🎬 TikTok: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.tiktok.com\u002F@superdevacademy?lang=th-TH\">\u003Cstrong>https:\u002F\u002Fwww.tiktok.com\u002F@superdevacademy?lang=th-TH\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>🌐 Website: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdevacademy.com\u002F\">\u003Cstrong>https:\u002F\u002Fwww.superdevacademy.com\u002F\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong>&nbsp;\u003C\u002Fstrong>\u003C\u002Fp>","53_11zon_hr6pmpaetg.webp","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002Fdjnleq3qain9xet\u002F53_11zon_hr6pmpaetg.webp","2026-03-04 08:46:09.690Z","",{"keywords":15,"locale":43,"school_blog":53},[16,23,28,33,38],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":22,"updated_by":13},"sclkey987654321","school_keywords","2026-03-04 08:33:55.302Z","0mue4zt83jcdtq9","Logging","2026-04-10 16:08:03.396Z",{"collectionId":17,"collectionName":18,"created":24,"created_by":13,"id":25,"name":26,"updated":27,"updated_by":13},"2026-03-04 08:20:11.547Z","ey3puyme01a9bsw","Go","2026-04-10 16:07:25.893Z",{"collectionId":17,"collectionName":18,"created":29,"created_by":13,"id":30,"name":31,"updated":32,"updated_by":13},"2026-03-04 08:20:42.484Z","vslzz9nvv6n77cx","JavaScript","2026-04-10 16:07:28.339Z",{"collectionId":17,"collectionName":18,"created":34,"created_by":13,"id":35,"name":36,"updated":37,"updated_by":13},"2026-03-04 08:24:40.405Z","05u3tysava2z6ga","Node.js","2026-04-10 16:07:29.504Z",{"collectionId":17,"collectionName":18,"created":39,"created_by":13,"id":40,"name":41,"updated":42,"updated_by":13},"2026-03-04 08:45:30.765Z","nayuhpre9emd5xw","JS2GO","2026-04-10 16:12:59.160Z",{"code":44,"collectionId":45,"collectionName":46,"created":47,"flag":48,"id":49,"is_default":50,"label":51,"updated":52},"th","pbc_1989393366","locales","2026-01-22 10:59:55.832Z","twemoji:flag-thailand","s8wri3bt4vgg2ji",true,"Thai","2026-04-10 15:42:46.614Z",{"category":54,"collectionId":55,"collectionName":56,"expand":57,"id":70,"views":71},"hsa1afr8fcnd6qb","pbc_2105096300","school_blogs",{"category":58},{"blogIds":59,"collectionId":60,"collectionName":61,"created":62,"created_by":13,"id":54,"image":63,"image_alt":13,"image_path":64,"label":65,"name":41,"priority":66,"publish_at":67,"scheduled_at":13,"status":68,"updated":69,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-04 08:24:37.986Z","js2_go_2_11zon_y6paxmuz32.webp","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fhsa1afr8fcnd6qb\u002Fjs2_go_2_11zon_y6paxmuz32.webp",{"en":41,"th":41},10,"2025-08-11 03:41:08.820Z","published","2026-04-25 02:32:14.339Z","8nnsl5wecthzmpo",215,"djnleq3qain9xet",[20,25,30,35,40],"2025-10-09 01:26:01.494Z","เรียนรู้การทำ Logging ใน JavaScript และ Go พร้อมตัวอย่างโค้ดและแนวทางปฏิบัติที่เหมาะสม เพื่อให้คุณสามารถติดตามเหตุการณ์ในโปรแกรม วิเคราะห์ปัญหา และจัดการ log อย่างมืออาชีพ","js2go-ep27-logging-javascript-vs-go","2026-04-25 02:48:00.698Z",1,{"th":76}]