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.MyApppersist.log.tag.MyApplog.tagpersist.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: แสดงเฉพาะ PIDraw: แสดงข้อความบันทึกดิบที่ไม่มีช่องข้อมูลเมตาอื่นๆ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 จะมีแท็กและลําดับความสําคัญเชื่อมโยงอยู่ คุณสามารถรวมตัวปรับแต่งรูปแบบใดก็ได้กับตัวเลือกรูปแบบดังต่อไปนี้
brieflongprocessrawtagthreadthreadtimetime
หากต้องการจัดรูปแบบรายละเอียดแป้นกดร่วมต่อไปนี้ ให้ป้อน logcat -v --help ที่
บรรทัดคำสั่งดังนี้
color: แสดงระดับความสำคัญแต่ละระดับด้วยสีที่ต่างกันdescriptive: แสดงคำอธิบายเหตุการณ์บัฟเฟอร์บันทึก ตัวแก้ไขนี้ส่งผลต่อเหตุการณ์ บันทึกบัฟเฟอร์ข้อความเท่านั้น และไม่มีผลต่อบัฟเฟอร์อื่นที่ไม่ใช่ไบนารี กิจกรรม คำอธิบายมาจากฐานข้อมูลแท็กบันทึกเหตุการณ์epoch: แสดงเวลาเป็นวินาที โดยเริ่มตั้งแต่วันที่ 1 มกราคม 1970monotonic: แสดงเวลาเป็นวินาทีของ CPU โดยเริ่มต้นจากการเปิดเครื่องครั้งล่าสุดprintable: ตรวจสอบว่าเนื้อหาการบันทึกไบนารีทั้งหมดหลุดเป็นอักขระหลีกuid: หากการควบคุมการเข้าถึงอนุญาต ระบบจะแสดง UID หรือรหัส Android ของ กระบวนการที่บันทึกไว้usec: แสดงเวลาด้วยความแม่นยำในระดับไมโครวินาทีUTC: แสดงเวลาเป็น UTCyear: เพิ่มปีตามเวลาที่แสดง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