Logcat — คืออะไร ระดับการบันทึกและการทำงานกับล็อก

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-05-06 เวลาอ่าน: 8 นาที

Logcat เป็นเครื่องมือ Android SDK สำหรับดูข้อความระบบและล็อกแอปพลิเคชันแบบเรียลไทม์ สามารถเข้าถึงได้ผ่าน ADB หรือคอนโซลในตัวของ Android Studio ตาม Android Developers Logcat จะรวบรวมข้อความจากกระบวนการทั้งหมดของระบบ กรองตามระดับความสำคัญและแท็ก และช่วยให้นักพัฒนาวินิจฉัยข้อผิดพลาด ติดตามการทำงานของโค้ด และวิเคราะห์ประสิทธิภาพ Logcat เป็นแหล่งข้อมูลหลักเมื่อดีบักแอปพลิเคชัน Android

ประเด็นสำคัญ

  • Logcat — หน้าต่างคอนโซลใน Android Studio สำหรับดูล็อกระบบ Android แบบเรียลไทม์
  • ระดับล็อก — VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT — กำหนดความสำคัญของข้อความและเกณฑ์การกรอง
  • การกรอง ตามแท็ก ระดับ และคำสำคัญช่วยแยกล็อกของแอปพลิเคชันเฉพาะออกจากสตรีมทั่วไป
  • ADB logcat — คำสั่งเทอร์มินัลสำหรับเข้าถึงล็อกโดยไม่ต้องใช้ Android Studio ผ่าน USB หรือ Wi-Fi
  • ล็อกข้อขัดข้อง — ข้อยกเว้นพร้อม stack trace จะเข้าสู่ Logcat โดยอัตโนมัติและมีการวินิจฉัยข้อขัดข้องอย่างสมบูรณ์

Logcat ใน Android คืออะไร

Logcat คือบัฟเฟอร์ระบบ Android ที่กระบวนการทั้งหมด (รวมถึงเคอร์เนล Linux, system_server และแอปพลิเคชัน) เขียนข้อความในรูปแบบเฉพาะ เครื่องมือ logcat ที่รวมอยู่ใน Android SDK จะอ่านบัฟเฟอร์นี้และแสดงข้อความแบบเรียลไทม์ เริ่มตั้งแต่ Android 4.1 (API 16) การเข้าถึง Logcat ถูกจำกัด: แอปพลิเคชันสามารถอ่านได้เฉพาะล็อกของตนเอง และล็อกระบบสามารถเข้าถึงได้ผ่าน ADB ด้วยสิทธิ์การดีบัก

แต่ละ ข้อความ Logcat ประกอบด้วยห้าฟิลด์: วันที่และเวลา, PID (ตัวระบุกระบวนการ), TID (ตัวระบุเธรด), ระดับล็อก และแท็ก รูปแบบคงที่และเหมือนกันทุกเวอร์ชัน Android ซึ่งช่วยให้ใช้ยูทิลิตี้ grep, awk และ sed สำหรับการกรองล็อกในไปป์ไลน์ CI/CD โดยไม่ต้องพึ่งพา IDE

ล็อก จะถูกเก็บไว้ในบัฟเฟอร์วงแหวนขนาดคงที่: 256 KB สำหรับ main, 256 KB สำหรับ system และ 256 KB สำหรับ events (Android 5+) เมื่อบัฟเฟอร์ล้น ข้อความเก่าจะถูกลบ นักพัฒนาสามารถเปลี่ยนขนาดบัฟเฟอร์ได้ผ่านคุณสมบัติ PROP logcat.size หรือในตัวเลือกนักพัฒนาของอุปกรณ์

ระดับล็อกและแท็ก: โครงสร้างข้อความ Logcat

หกระดับ การบันทึกกำหนดความสำคัญของข้อความ Android ใช้ระดับมาตรฐานคล้ายกับแพลตฟอร์มอื่น ๆ แต่ใช้ชื่อค่าคงที่ของตัวเองในคลาส Log การเลือกระดับที่ถูกต้องช่วยกรองล็อกอย่างมีประสิทธิภาพและป้องกันไม่ให้ข้อความสำคัญจมอยู่ท่ามกลางข้อความรอง

ระดับค่าคงที่วัตถุประสงค์แสดงโดยค่าเริ่มต้น
VERBOSELog.vข้อมูลการดีบักโดยละเอียดสูงสุดไม่
DEBUGLog.dข้อความดีบักสำหรับนักพัฒนาไม่
INFOLog.iข้อความข้อมูลเกี่ยวกับการทำงานของแอปพลิเคชันใช่
WARNLog.wคำเตือนเกี่ยวกับปัญหาที่อาจเกิดขึ้นใช่
ERRORLog.eข้อผิดพลาดร้ายแรงและข้อยกเว้นใช่
ASSERTLog.wtfข้อผิดพลาดที่ไม่ควรเกิดขึ้นโดยหลักการใช่

แท็ก: การจัดระเบียบข้อความตามโมดูล

แท็ก (tag) — สตริงสูงสุด 23 อักขระที่ระบุแหล่งที่มาของข้อความ แนะนำให้ใช้ชื่อคลาสหรือโมดูลเป็นแท็ก: MainActivity, AuthManager, NetworkModule ซึ่งช่วยให้กรองล็อกตามคอมโพเนนต์เฉพาะของแอปพลิเคชัน เพื่อความสอดคล้องในทีม คุณสามารถสร้างค่าคงที่แท็กในไฟล์แยกต่างหากหรือใช้ไลบรารี Timber ซึ่งจะแทรกแท็กโดยอัตโนมัติตามชื่อคลาส

ล็อกข้อขัดข้องและ stack trace ข้อยกเว้น

เมื่อเกิด ข้อยกเว้นที่ไม่ถูกจัดการ Android จะเขียน stack trace เต็มรูปแบบลงใน Logcat โดยอัตโนมัติ โดยระบุคลาส เมธอด บรรทัดโค้ด และห่วงโซ่การเรียก ล็อกข้อขัดข้องประกอบด้วยประเภทข้อยกเว้น (NullPointerException, RuntimeException) ข้อความ และลำดับการเรียกจากจุดข้อขัดข้องไปยังจุดเริ่มต้นของแอปพลิเคชัน สำหรับการวิเคราะห์ล็อกข้อขัดข้องจากอุปกรณ์ของผู้ใช้ จะใช้ Firebase Crashlytics ซึ่งซิงโครไนซ์ stack trace กับแผนที่การทำให้สับสน (mapping.txt สำหรับ Android)

Logcat ใน Android Studio: อินเทอร์เฟซ ตัวกรอง และการค้นหา

Android Studio มีอินเทอร์เฟซกราฟิก Logcat ที่เข้าถึงได้ผ่าน View → Tool Windows → Logcat (Alt + 6) หน้าต่าง Logcat อัปเดตแบบเรียลไทม์ แสดงข้อความทั้งหมดจากอุปกรณ์ที่เชื่อมต่อ และช่วยให้กำหนดค่าตัวกรองที่ยืดหยุ่นเพื่อแยกข้อมูลที่ต้องการออกจากสตรีมทั่วไป

การกรองตามระดับและแท็ก

รายการดรอปดาวน์ Log Level กรองข้อความตามระดับต่ำสุด: เลือก WARN เพื่อดูเฉพาะคำเตือนและข้อผิดพลาด โดยซ่อน VERBOSE, DEBUG และ INFO ช่องค้นหาช่วยให้ค้นหาตามข้อความหรือแท็ก — รองรับ regex ซึ่งสะดวกสำหรับการค้นหาข้อความตามรูปแบบ

ตัวกรองที่บันทึกไว้

Saved Filters — ฟีเจอร์ที่มีประสิทธิภาพของ Logcat ใน Android Studio คุณสามารถสร้างตัวกรองที่แสดงเฉพาะข้อความที่มีแท็กของแอปพลิเคชัน (tag:MyApp) และระดับ WARN+ ตัวกรองจะถูกเก็บไว้ระหว่างเซสชันและสามารถใช้ได้จากรายการดรอปดาวน์ สำหรับโปรเจกต์ที่มีหลายโมดูล ให้สร้างตัวกรองแยกต่างหากสำหรับแต่ละโมดูล

text
# นิพจน์ตัวอย่างสำหรับการกรองล็อกแอปพลิเคชัน
tag:"MyApp" level:WARN # เฉพาะ WARN+ สำหรับ MyApp
package:"com.mycompany" # บันทึกทั้งหมดของแพ็กเกจ
-tag:"okhttp" # ไม่รวมบันทึกของ OkHttp

การส่งออกและการวิเคราะห์

ล็อก Logcat สามารถส่งออกเป็นไฟล์ข้อความผ่านไอคอน Save to File ซึ่งมีประโยชน์สำหรับแนบไปกับตั๋วใน Jira หรือวิเคราะห์เซสชันที่ยาวนาน ล็อกที่ส่งออกสามารถเปิดได้ในโปรแกรมแก้ไขข้อความใด ๆ และใช้ grep เพื่อค้นหารูปแบบ สำหรับการดูแบบจัดรูปแบบ ให้ใช้ยูทิลิตี้ logcat-color

ADB logcat: คำสั่งเทอร์มินัลสำหรับการทำงานขั้นสูง

ADB logcat — เวอร์ชันคอนโซลของ Logcat ที่เข้าถึงได้ผ่าน Android Debug Bridge ข้อได้เปรียบหลักคือความสามารถในการทำงานบนเซิร์ฟเวอร์ CI ในสคริปต์อัตโนมัติ และบนอุปกรณ์ที่ไม่มี Android Studio ADB logcat รองรับตัวกรองทั้งหมดเดียวกันกับ GUI แต่มีความยืดหยุ่นของบรรทัดคำสั่ง

คำสั่งพื้นฐาน

คำสั่ง adb logcat โดยไม่มีอาร์กิวเมนต์จะแสดงบัฟเฟอร์ทั้งหมดแบบเรียลไทม์ ใช้ Ctrl+C เพื่อหยุด แฟล็ก -c จะล้างบัฟเฟอร์ก่อนเริ่มบันทึก — สะดวกเมื่อคุณต้องการแยกล็อกของการทดสอบปัจจุบันจากข้อความก่อนหน้า แฟล็ก -b จะเลือกประเภทบัฟเฟอร์: main, system, events, crash (Android 12+)

bash
# ล้างบัฟเฟอร์และเริ่มบันทึกล็อกด้วยแท็ก MyApp
adb logcat -c
adb logcat MyApp:D *:S

# บันทึกล็อกเป็นไฟล์
adb logcat -d > logcat_dump.txt

# การกรองตาม PID ของกระบวนการ
adb logcat --pid=12345

การกรองด้วย grep และ awk

การรวม ADB กับยูทิลิตี้ Unix ให้ความยืดหยุ่นสูงสุด ตัวอย่างเช่น ตัวกรอง "*:S TAG:D" จะแสดงเฉพาะข้อความที่มีแท็ก TAG ระดับ DEBUG ขึ้นไป โดยซ่อนข้อความอื่นทั้งหมด หากต้องการดูเฉพาะข้อยกเว้น ให้ใช้ grep -i exception หากต้องการวิเคราะห์ความถี่ของข้อผิดพลาด ให้ใช้ sort | uniq -c ที่คอลัมน์แท็ก

Logcat ใน CI/CD

บน เซิร์ฟเวอร์ CI จะใช้ Logcat เพื่อรวบรวมการวินิจฉัยระหว่างการทดสอบ UI ไปป์ไลน์ทั่วไป: ล้างบัฟเฟอร์ก่อนเรียกใช้การทดสอบ บันทึกดัมพ์ล็อกเป็นอาร์ติแฟกต์ของการสร้างหลังจากดำเนินการทดสอบ หากการทดสอบล้มเหลว ล็อกสามารถระบุได้ว่าความล้มเหลวนั้นเกิดจาก ANR ข้อยกเว้นที่ไม่ถูกจัดการ หรือการหมดเวลาเครือข่าย

การบันทึกในโค้ด: Log.d, Log.e และ Timber

คลาส android.util.Log — API ในตัวสำหรับเขียนข้อความลงใน Logcat Log.v, Log.d, Log.i, Log.w, Log.e และ Log.wtf รับแท็ก (สตริง) และข้อความ (สตริง) หรือข้อความ + Throwable สำหรับการจัดรูปแบบข้อความ ให้ใช้ String.format หรือเทมเพลตสตริง Kotlin — หลีกเลี่ยงการต่อสตริงซึ่งสร้างอ็อบเจกต์ที่ไม่จำเป็นในฮีป

ไลบรารี Timber

Timber — ไลบรารียอดนิยมโดย Jake Wharton ที่แก้ไขข้อบกพร่องของ Log API ในตัว Timber จะแทรกแท็กโดยอัตโนมัติตามชื่อคลาสที่เรียกการบันทึกและไม่ต้องส่งแท็กในการเรียกทุกครั้ง Timber ยังรองรับการบันทึกแบบมีเงื่อนไข: ในบิลด์ Release การเรียก Timber.v และ Timber.d สามารถปิดใช้งานได้ด้วยบรรทัดเดียวใน Application.onCreate

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Log API ในตัว
        Log.d("MainActivity", "onCreate called")

        // Timber — แท็กอัตโนมัติตามชื่อคลาส
        Timber.d("onCreate called")
    }

    private fun loadData() {
        try {
            val result = fetchFromNetwork()
            Timber.i("Data loaded: $result")
        } catch (e: IOException) {
            Timber.e(e, "Failed to load data")
        }
    }
}

การบันทึกแบบมีเงื่อนไขสำหรับ Release

ใน บิลด์ Release แนะนำให้ปิดการใช้งานล็อก VERBOSE และ DEBUG เพื่อลดภาระบนบัฟเฟอร์ Logcat และป้องกันการรั่วไหลของข้อมูลที่ละเอียดอ่อน Timber แก้ปัญหานี้ด้วย PlantingTree: ในรูปแบบ Debug จะปลูก DebugTree (บันทึกทุกอย่าง) ใน Release — CrashReportingTree (บันทึกเฉพาะ ERROR ผ่าน Crashlytics) Log API ในตัวไม่รองรับการบันทึกแบบมีเงื่อนไข — นักพัฒนาต้องห่อแต่ละการเรียกด้วย if (BuildConfig.DEBUG)

คำถามที่พบบ่อย

วิธีล้างบัฟเฟอร์ Logcat ก่อนเรียกใช้การทดสอบ

ใช้ คำสั่ง adb logcat -c ก่อนเรียกใช้การทดสอบ หรือใน Android Studio ให้คลิกปุ่ม Clear Logcat (ถังขยะ) ในหน้าต่าง Logcat การล้างไม่มีผลกับบัฟเฟอร์ระบบของกระบวนการอื่น มีผลเฉพาะกับการเชื่อมต่อปัจจุบันเท่านั้น

วิธีเพิ่มขนาดบัฟเฟอร์ Logcat

ดำเนินการ adb logcat -G 2M เพื่อเพิ่มบัฟเฟอร์เป็น 2 MB ขนาดสูงสุดขึ้นอยู่กับอุปกรณ์: บน Android 10+ สามารถใช้ได้สูงสุด 16 MB การเปลี่ยนแปลงจะคงอยู่จนกว่าจะรีบูตอุปกรณ์ สำหรับการกำหนดค่าถาวร ให้ใช้ build.prop ใน device tree

ทำไม Logcat ไม่แสดงล็อกของแอปพลิเคชัน

สาเหตุที่เป็นไปได้: แอปพลิเคชันทำงานในโหมด Release (ล็อก Timber.v/d ถูกปิดใช้งาน) ตัวกรอง Logcat ซ่อนระดับที่ต้องการ หรือคุณเชื่อมต่อกับอุปกรณ์ผิด ตรวจสอบด้วยว่าคุณเลือกกระบวนการของแอปพลิเคชันใน Android Studio ไม่ใช่ system_process

วิธีอ่านล็อกข้อขัดข้องจาก Logcat

ค้นหา บรรทัด ที่มี FATAL EXCEPTION ซึ่งด้านล่างมี stack trace เต็มรูปแบบ บรรทัดแรกประกอบด้วยประเภทข้อยกเว้นและข้อความ บรรทัดถัดไปประกอบด้วยห่วงโซ่การเรียกพร้อมไฟล์และบรรทัดโค้ด ใช้ grep "FATAL EXCEPTION" สำหรับการค้นหาอย่างรวดเร็วในล็อกทั้งหมด

ANR คืออะไรและวิธีตรวจจับใน Logcat

ANR (Application Not Responding) — สถานการณ์ที่เธรดหลัก (UI thread) ถูกบล็อกนานกว่า 5 วินาที ใน Logcat ANR จะปรากฏเป็นข้อความที่มีแท็ก ActivityManager และข้อความ "ANR in ..." พร้อม stack trace ที่แนบมาของเธรดทั้งหมด ใช้ตัวกรอง tag:ActivityManager level:ERROR

สรุป

  • Logcat — บัฟเฟอร์ระบบ Android ที่เข้าถึงได้ผ่าน ADB และหน้าต่างในตัวของ Android Studio
  • หกระดับ การบันทึก (VERBOSE — ASSERT) กำหนดความสำคัญและเกณฑ์การกรองของข้อความ
  • แท็ก ช่วยจัดกลุ่มข้อความตามโมดูลแอปพลิเคชันเพื่อการกรองที่รวดเร็ว
  • ADB logcat ด้วย grep/awk มีความยืดหยุ่นมากกว่าอินเทอร์เฟซ GUI และเหมาะสำหรับไปป์ไลน์ CI/CD
  • Timber ทำให้การบันทึกง่ายขึ้น แทรกแท็กโดยอัตโนมัติ และปิดระดับ Debug ใน Release
  • ล็อกข้อขัดข้อง พร้อมข้อยกเว้นและ stack trace จะเข้าสู่ Logcat โดยอัตโนมัติทุกครั้งที่เกิดข้อขัดข้อง
  • ตัวกรองที่บันทึกไว้ ใน Android Studio ช่วยเร่งการวิเคราะห์ล็อกประจำวัน

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม