Logcat คือเครื่องมือบรรทัดคำสั่งที่ทำสำเนาบันทึกของข้อความระบบ รวมถึง
ข้อความที่คุณเขียนจากแอปด้วย
Log ชั้นเรียน
หน้านี้เกี่ยวข้องกับเครื่องมือบรรทัดคำสั่ง logcat แต่คุณยังดูบันทึกได้ด้วย
ข้อความจากหน้าต่าง Logcat ใน Android Studio สำหรับ
ข้อมูลเกี่ยวกับการดูและการกรองบันทึกจาก Android Studio
โปรดดูที่ดูและเขียนบันทึกด้วย
Logcat
ภาพรวมของระบบการบันทึก
    ระบบการบันทึกของ Android คือชุดบัฟเฟอร์วงกลมที่มีโครงสร้างซึ่งระบบดูแลรักษา
    กระบวนการ logd ชุดบัฟเฟอร์ที่พร้อมใช้งานได้รับการแก้ไขและกำหนดโดยองค์ประกอบ
    ระบบ บัฟเฟอร์ที่เกี่ยวข้องมากที่สุด ได้แก่
    
- main: เก็บบันทึกแอปพลิเคชันส่วนใหญ่
- system: จัดเก็บข้อความที่มาจากระบบปฏิบัติการ Android
-  crash: จัดเก็บบันทึกข้อขัดข้อง แต่ละรายการในบันทึกจะมีลำดับความสำคัญ ซึ่งก็คือแท็กที่ระบุ ต้นทางของบันทึก และข้อความบันทึกจริง
    อินเทอร์เฟซ C/C++ หลักของระบบการบันทึกคือไลบรารีที่ใช้ร่วมกัน liblog
    และส่วนหัวคือ <android/log.h>
    ศูนย์การบันทึกเฉพาะภาษาทั้งหมด
    (รวม android.util.Log)
    เรียกใช้ฟังก์ชันนี้
    __android_log_write โดยค่าเริ่มต้น โมเดลจะเรียกใช้ฟังก์ชัน
    __android_log_logd_logger ซึ่งจะส่งรายการบันทึกไปยัง logd
    โดยใช้ซ็อกเก็ต ตั้งแต่ API ระดับ 30 เป็นต้นไป ฟังก์ชันการบันทึกสามารถเปลี่ยนแปลงได้ด้วยการเรียก
    __android_set_log_writer ดูข้อมูลเพิ่มเติมได้ใน
    เอกสาร NDK
  
    บันทึกที่แสดงโดย adb logcat จะผ่านการกรอง 4 ระดับดังนี้
  
- การกรองเวลาคอมไพล์
- บันทึกบางรายการอาจมีข้อมูลครบถ้วน ขึ้นอยู่กับการตั้งค่าการคอมไพล์
      ออกจากไบนารีแล้ว ตัวอย่างเช่น สามารถกำหนดค่า ProGuard เพื่อนำการเรียกไปยัง
      Log.dจากโค้ด Java
- การกรองพร็อพเพอร์ตี้ของระบบ
- liblogค้นหาชุดพร็อพเพอร์ตี้ของระบบเพื่อ กำหนดระดับความรุนแรงขั้นต่ำที่จะส่งไปยัง- logdหากบันทึกของคุณมี แท็ก- MyAppพร็อพเพอร์ตี้ต่อไปนี้ได้รับการตรวจสอบและควรมี อักษรตัวแรกของความรุนแรงขั้นต่ำ (- V,- D,- I,- W,- Eหรือ- Sเพื่อปิดบันทึกทั้งหมด) ให้ทำดังนี้
- log.tag.MyApp
- persist.log.tag.MyApp
- log.tag
- persist.log.tag
- การกรองแอปพลิเคชัน
- หากไม่ได้ตั้งค่าพร็อพเพอร์ตี้ไว้ liblogจะใช้ลำดับความสำคัญขั้นต่ำที่กำหนดโดย__android_log_set_minimum_priorityการตั้งค่าเริ่มต้นคือINFO
- การกรองการแสดงผล
- adb logcatรองรับตัวกรองเพิ่มเติมที่สามารถลด จำนวนบันทึกที่แสดงจาก- logdดูหัวข้อเกี่ยวกับ การกรองเอาต์พุตของบันทึกเพื่อดูรายละเอียดเพิ่มเติม
ไวยากรณ์บรรทัดคำสั่ง
    หากต้องการเรียกใช้ logcat ผ่าน Shell adb การใช้งานทั่วไปคือ
  
[adb] shell logcat [<option>] ... [<filter-spec>] ...
นอกจากนี้ยังมีชวเลข adb logcat อีกด้วย แต่จะขยายเป็น
    adb shell logcat
ตัวเลือก
logcat มีตัวเลือกมากมาย ตัวเลือกที่มีจะขึ้นอยู่กับระบบปฏิบัติการ
    เวอร์ชันของอุปกรณ์ที่คุณใช้งานอยู่ หากต้องการดูความช่วยเหลือเกี่ยวกับ logcat สำหรับ
    อุปกรณ์ที่คุณใช้งานอยู่ ให้สั่งการ:
    
    adb logcat --help
    โปรดทราบว่าเนื่องจาก logcat เป็นเครื่องมือสำหรับนักพัฒนาแอประบบปฏิบัติการต่างๆ รวมถึงนักพัฒนาแอป
      (ซึ่งนักพัฒนาแอปคาดว่าจะใช้ Android Studio แทน) ตัวเลือกส่วนใหญ่มีเพียง
      ใช้เป็น root ได้
กรองเอาต์พุตของบันทึก
แท็กของข้อความบันทึกคือสตริงสั้นๆ ที่ระบุคอมโพเนนต์ของระบบที่ ข้อความเริ่มทำงาน เช่น "View" สำหรับระบบมุมมอง
ลำดับความสำคัญคือค่าอักขระค่าใดค่าหนึ่งต่อไปนี้ โดยเรียงลำดับจากต่ำสุดไปสูงสุด ลำดับความสำคัญ:
- V: รายละเอียด (ลำดับความสำคัญต่ำสุด)
- D: แก้ไขข้อบกพร่อง
- I: ข้อมูล
- W: คำเตือน
- E: ข้อผิดพลาด
- F: ร้ายแรง
- S: ปิดเสียง (มีลำดับความสำคัญสูงสุด โดยไม่พิมพ์รายการใด)
หากต้องการดูรายการแท็กที่ใช้ในระบบที่มีลำดับความสำคัญ ให้เรียกใช้
  logcat และสังเกต 2 คอลัมน์แรกของแต่ละข้อความ ตามที่ระบุเป็น
  <priority>/<tag>
    ต่อไปนี้เป็นตัวอย่างของเอาต์พุต logcat สั้นๆ ที่ได้มาพร้อมกับ
    คำสั่ง logcat -v brief output ผลลัพธ์แสดงให้เห็นว่าข้อความเกี่ยวข้องกับ
    ลำดับความสำคัญ "I" และแท็ก "ActivityManager" ดังนี้
  
I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
หากต้องการลดเอาต์พุตของบันทึกในระดับที่จัดการได้ ให้จำกัดเอาต์พุตของบันทึกโดยใช้ ตัวกรอง นิพจน์ นิพจน์ตัวกรองให้คุณระบุลำดับความสำคัญของแท็กในระบบ ชุดค่าผสมที่คุณสนใจ ระบบจะระงับข้อความอื่นๆ สำหรับ แท็กที่ระบุ
นิพจน์ตัวกรองใช้รูปแบบ tag:priority ... โดยที่ tag
  ระบุแท็กที่สนใจและ priority แสดงระดับต่ำสุดของ
  ลำดับความสำคัญของรายงานสำหรับแท็กนั้น ข้อความสำหรับแท็กที่ลำดับความสำคัญที่ระบุไว้หรือสูงกว่า
  เขียนลงในบันทึก ระบุข้อกำหนด tag:priority จำนวนเท่าใดก็ได้ใน
  เป็นนิพจน์ตัวกรองเพียงรายการเดียว ชุดข้อกำหนดจะคั่นด้วยช่องว่าง
ต่อไปนี้เป็นตัวอย่างนิพจน์ตัวกรองที่ระงับข้อความบันทึกทั้งหมด ยกเว้น รายการที่มีแท็ก "ActivityManager" ลำดับความสำคัญของ "ข้อมูล" หรือสูงกว่า และรายการที่มีแท็ก "แอปของฉัน" ที่มีลำดับความสำคัญ "แก้ไขข้อบกพร่อง" ขึ้นไป:
adb logcat ActivityManager:I MyApp:D *:S
องค์ประกอบสุดท้ายในนิพจน์ที่อยู่ก่อนหน้า *:S ตั้งค่าระดับความสำคัญสำหรับ
    แท็กทั้งหมดให้เป็น "ปิดเสียง" เพื่อให้บันทึกเฉพาะข้อความด้วย "ActivityManager" และ "แอปของฉัน" คือ
  แสดงอยู่ การใช้ *:S จะทำให้เอาต์พุตของบันทึกถูกจำกัดไว้เฉพาะ
  ตัวกรองที่คุณระบุไว้อย่างชัดแจ้ง *:S ให้ตัวกรองของคุณทำหน้าที่เป็น
  เป็นรายการที่อนุญาตสำหรับเอาต์พุตบันทึก
    หมายเหตุ: ในบางเชลล์ "*" สงวนไว้โดย Shell หากคุณ
    กำลังใช้เชลล์ดังกล่าว ให้รวมนิพจน์ตัวกรองในเครื่องหมายคำพูด: adb logcat
    "ActivityManager:I MyApp:D *:S"
  
นิพจน์ตัวกรองต่อไปนี้จะแสดงข้อความบันทึกทั้งหมดที่มี "คำเตือน" ระดับความสำคัญ และ สูงกว่าในแท็กทั้งหมด
adb logcat *:W
หากคุณใช้ logcat จากคอมพิวเตอร์การพัฒนาแทนที่จะเรียกใช้บน
  Shell adb ระยะไกล คุณยังสามารถตั้งค่านิพจน์ตัวกรองเริ่มต้นได้โดยการส่งออกค่าสำหรับ
  ตัวแปรสภาพแวดล้อม ANDROID_LOG_TAGS:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
ระบบจะไม่ส่งออกตัวกรอง ANDROID_LOG_TAGS ไปยังโปรแกรมจำลอง/อุปกรณ์
  หากคุณกำลังเรียกใช้ logcat จาก Shell ระยะไกลหรือใช้ adb shell
  logcat
ควบคุมรูปแบบเอาต์พุตของบันทึก
ข้อความบันทึกมีช่องข้อมูลเมตามากมายนอกเหนือจากแท็กและลำดับความสำคัญ คุณสามารถ
  แก้ไขรูปแบบเอาต์พุตสำหรับข้อความเพื่อให้แสดงฟิลด์ข้อมูลเมตาที่เฉพาะเจาะจง โดยดำเนินการดังนี้
  ใช้ตัวเลือก -v และระบุรูปแบบเอาต์พุตที่รองรับรูปแบบใดรูปแบบหนึ่งต่อไปนี้
  
- brief: แสดงลำดับความสำคัญ แท็ก และ PID ของกระบวนการออกแอตทริบิวต์
- long: แสดงช่องข้อมูลเมตาทั้งหมดและแยกข้อความที่เว้นว่างไว้ เส้น
- process: แสดงเฉพาะ PID
- raw: แสดงข้อความบันทึกดิบที่ไม่มีช่องข้อมูลเมตาอื่นๆ
- tag: แสดงลำดับความสำคัญและแท็กเท่านั้น
- thread:รูปแบบเดิมที่แสดงลำดับความสำคัญ, PID และ TID ของ ชุดข้อความที่ออกข้อความ
- threadtime(ค่าเริ่มต้น): แสดงวันที่ เวลาการเรียกใช้ ลำดับความสำคัญ แท็ก, PID และ TID ของเทรดที่ออกข้อความ
- time: แสดงวันที่ เวลาเรียกใช้ ลำดับความสำคัญ แท็ก และ PID ของ กระบวนการออกข้อความ
เมื่อเริ่ม logcat ให้ระบุรูปแบบเอาต์พุตที่ต้องการโดยใช้เมธอด
  ตัวเลือก -v:
[adb] logcat [-v <format>]
ตัวอย่างที่แสดงวิธีสร้างข้อความในเอาต์พุต thread มีดังนี้
  รูปแบบ:
adb logcat -v thread
คุณจะระบุรูปแบบเอาต์พุตได้โดยใช้ตัวเลือก -v ได้เพียง 1 รูปแบบเท่านั้น อย่างไรก็ตาม คุณ
    สามารถระบุคีย์ตัวปรับแต่งได้มากตามต้องการ ตราบใดที่คีย์นั้นเหมาะสม logcat
    ละเว้นตัวแก้ไขที่ไม่สมเหตุสมผล
  
ตัวปรับแต่งรูปแบบ
    ตัวแก้ไขรูปแบบจะเปลี่ยนเอาต์พุต logcat หากต้องการระบุตัวแก้ไขรูปแบบ
    ใช้ตัวเลือก -v ดังนี้
  
adb logcat -b all -v color -d
ทุกข้อความในบันทึก Android จะมีแท็กและลําดับความสําคัญเชื่อมโยงอยู่ คุณสามารถรวมตัวปรับแต่งรูปแบบใดก็ได้กับตัวเลือกรูปแบบดังต่อไปนี้
- brief
- long
- process
- raw
- tag
- thread
- threadtime
- time
  หากต้องการจัดรูปแบบรายละเอียดแป้นกดร่วมต่อไปนี้ ให้ป้อน logcat -v --help ที่
  บรรทัดคำสั่งดังนี้
  
- color: แสดงระดับความสำคัญแต่ละระดับด้วยสีที่ต่างกัน
- descriptive: แสดงคำอธิบายเหตุการณ์บัฟเฟอร์บันทึก ตัวแก้ไขนี้ส่งผลต่อเหตุการณ์ บันทึกบัฟเฟอร์ข้อความเท่านั้น และไม่มีผลต่อบัฟเฟอร์อื่นที่ไม่ใช่ไบนารี กิจกรรม คำอธิบายมาจากฐานข้อมูลแท็กบันทึกเหตุการณ์
- epoch: แสดงเวลาเป็นวินาที โดยเริ่มตั้งแต่วันที่ 1 มกราคม 1970
- monotonic: แสดงเวลาเป็นวินาทีของ CPU โดยเริ่มต้นจากการเปิดเครื่องครั้งล่าสุด
- printable: ตรวจสอบว่าเนื้อหาการบันทึกไบนารีทั้งหมดหลุดเป็นอักขระหลีก
- uid: หากการควบคุมการเข้าถึงอนุญาต ระบบจะแสดง UID หรือรหัส Android ของ กระบวนการที่บันทึกไว้
- usec: แสดงเวลาด้วยความแม่นยำในระดับไมโครวินาที
- UTC: แสดงเวลาเป็น UTC
- year: เพิ่มปีตามเวลาที่แสดง
- zone: เพิ่มเขตเวลาท้องถิ่นตามเวลาที่แสดง
ดูบัฟเฟอร์บันทึกสำรอง
ระบบการบันทึกของ Android จะเก็บบัฟเฟอร์วงกลมหลายรายการสำหรับข้อความบันทึก แต่ไม่ใช่ทั้งหมด
  ข้อความบันทึกจะส่งไปยังบัฟเฟอร์วงกลมเริ่มต้น หากต้องการดูข้อความบันทึกเพิ่มเติม
  เรียกใช้คำสั่ง logcat ด้วยตัวเลือก -b เพื่อขอให้ดู
  บัฟเฟอร์วงกลมสำรอง คุณดูบัฟเฟอร์สำรองต่อไปนี้ได้
- radio: ดูบัฟเฟอร์ที่เกี่ยวข้องกับวิทยุ/โทรศัพท์ ข้อความ
- events: ดูข้อความบัฟเฟอร์เหตุการณ์ของระบบไบนารีที่ตีความแล้ว
- main: ดูบัฟเฟอร์บันทึกหลัก (ค่าเริ่มต้น) ซึ่งไม่มี ข้อความระบบและข้อความบันทึกข้อขัดข้อง
- system: ดูบัฟเฟอร์บันทึกของระบบ (ค่าเริ่มต้น)
- crash: ดูบัฟเฟอร์บันทึกข้อขัดข้อง (ค่าเริ่มต้น)
- all: ดูบัฟเฟอร์ทั้งหมด
- default: รายงาน- main,- systemและ- crashบัฟเฟอร์
      การใช้งานตัวเลือก -b มีดังนี้
[adb] logcat [-b <buffer>]
ต่อไปนี้คือตัวอย่างของวิธีดูบัฟเฟอร์ไฟล์บันทึกที่มีข้อความวิทยุและโทรศัพท์
adb logcat -b radio
    หากต้องการระบุแฟล็ก -b หลายรายการสำหรับบัฟเฟอร์ทั้งหมดที่ต้องการพิมพ์
    ให้ป้อนข้อมูลต่อไปนี้
  
logcat -b main -b radio -b events
    ระบุแฟล็ก -b รายการเดียวที่มีรายการบัฟเฟอร์ที่คั่นด้วยคอมมา
    เช่น
  
logcat -b main,radio,events
บันทึกจากโค้ด
ชั้นเรียน Log ให้คุณสร้าง
    รายการบันทึกในโค้ดของคุณที่แสดงในเครื่องมือ logcat วิธีบันทึกที่พบได้ทั่วไปมีดังนี้
- Log.v(String, String)(รายละเอียด)
- Log.d(String, String)(แก้ไขข้อบกพร่อง)
- Log.i(String, String)(ข้อมูล)
- Log.w(String, String)(คำเตือน)
- Log.e(String, String)(ข้อผิดพลาด)
ตัวอย่างเช่น ในการใช้การเรียกต่อไปนี้
Kotlin
Log.i("MyActivity", "MyClass.getView() — get item number $position")
Java
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
logcat แสดงผลลัพธ์ที่คล้ายกับตัวอย่างต่อไปนี้
I/MyActivity( 1557): MyClass.getView() — get item number 1
