![]()
![]()
ใน Android app ส่วนใหญ่พบว่านักพัฒนา (จริง ๆ ก็ทุกระบบนะ)
จะเขียน code สำหรับจัดเก็บ log เต็มไปหมดเลย
คำถามที่เด้งขึ้นมาทันทีเลยก็คือ
ไม่เบื่อ code เหล่านี้กันบ้างหรือไง ?
เขียนซ้ำไปซ้ำมาอยู่ได้
บ่อยครั้งพบว่า code สำหรับจัดเก็บ log การทำงาน
มีมากกว่า code ทำงานจริง ๆ อีกนะ !!
ดังนั้นสิ่งที่ควรต้องทำเลยก็คือ ...
ไม่สิ ?
ดังนั้นสิ่งที่ต้องทำเลยก็คือ
เลิกเขียน log ที่ไม่จำเป็นลงไปซะ !!
ไม่ก็เขียน test มาทดสอบซะ !!
แต่ดูแล้วท่าทางจะยากกว่าเดิมไปเสียอีก
ดังนั้นขอแนะนำ
Hugo ก็แล้วกัน
คิดว่าเป็นทางสายกลางที่น่าจะดีกว่าไม่ทำอะไรเลย
การใช้งาน Hugo
การใช้งานนั้นไม่ยากเลย
เพียงแค่ใส่ annotation คือว่า
@DebugLog ไปที่ method ที่เราต้องการ
เมื่อมีการเรียกใช้ method นั้น ๆ
ก็จะทำการ print ค่าที่ส่งเข้ามายัง method
และค่าที่ถูก return ออกจาก method
โดยที่ไม่ต้องไปเขียน log ใด ๆ ใน code อีกต่อไป
จะทำงานเฉพาะ build type ที่เปิดการ debug เท่านั้น
หรือไม่ปิดการทำงานของ Hugo
เมื่อลองเข้าไปดูการพัฒนาของ Hugo แล้ว
พบว่าใช้ AspectJ นั่นเอง (AOP ย่อมาจาก Aspect Oriented Programming)
ปล. แสดงว่าในแต่ละ method ต้องมีหน้าที่การทำงานชัดเจนนะ
ไม่ใช้ทำงานเยอะ ๆ ยาว ๆ
ซึ่งคิดว่าน่าจะลำบากต่อชีวิตน่าดู
มาดูตัวอย่างการใช้งานแบบง่าย ๆ กันหน่อย
เริ่มจากการเพิ่ม dependency plugin ใน build.gradle ดังนี้
[gist id="54395b470a924c8ed7b40f7fad780a8c" file="build.gradle"]
จากนั้นเพิ่ม plugin เข้าไปในไฟล์ build.gradle ของ app ดังนี
[gist id="54395b470a924c8ed7b40f7fad780a8c" file="app_build.gradle"]
ทำการเขียน code แบบขำ ๆ สัก 1 method ดังนี้
[gist id="54395b470a924c8ed7b40f7fad780a8c" file="MainActivity.java"]
ทำการ run app จะแสดง log ดังนี้
ซึ่งดูดีมีฐานะอย่างมาก
[code]
V/MainActivity: ⇢ sayHi(name="Somkiat")
V/MainActivity: ⇠ sayHi [0ms] = "Hi Somkiat"
[/code]
คิดว่าน่าจะมีประโยชน์บ้างนะครับ