ฉันจะเขียนเอาต์พุตไปยัง Log in Android ได้อย่างไร


153

ฉันต้องการเขียนผลลัพธ์การดีบักบางอย่างลงในบันทึกเพื่อตรวจสอบด้วย logcat

ถ้าฉันเขียนบางสิ่งไปยัง System.out สิ่งนี้จะปรากฏขึ้นใน logcat

เป็นวิธีที่สะอาดในการเขียนบันทึกและเพิ่มระดับและแท็กในการส่งออกของฉันคืออะไร

คำตอบ:


211

android.util.Logสอบสวน มันช่วยให้คุณเขียนลงในบันทึกที่มีระดับการบันทึกต่าง ๆ และคุณสามารถระบุแท็กต่าง ๆ เพื่อจัดกลุ่มเอาต์พุต ตัวอย่างเช่น

Log.w("myApp", "no network");

จะส่งคำเตือนด้วยแท็ก myApp และข้อความที่ไม่มีเครือข่าย


สิ่งที่แตกต่างจากการใช้งานlog.dคืออะไร?
JMASTER B

5
wในLog.w(...)หมายถึงคำเตือน มีรุ่นเพิ่มเติม : d- แก้ปัญหา, e- ข้อผิดพลาด, i- ข้อมูล, v- verbose wtf- สิ่งที่เป็นความล้มเหลวที่น่ากลัว ;-)
patryk.beza

20

แท็กใช้เพื่อค้นหาผลลัพธ์ของคุณได้อย่างง่ายดายเนื่องจากบางครั้งผลลัพธ์ของLogCatอาจยาวมาก คุณสามารถกำหนดที่ใดที่หนึ่งในชั้นเรียนของคุณ:

ส่วนตัวคงสุดท้าย String TAG = "myApp";

และใช้เมื่อทำการดีบัก

Log.v (TAG, "ทำอะไรบางอย่าง");

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถใช้ตัวกรองเพื่อค้นหาแท็กเท่านั้น




5

โปรดดูบันทึกด้วยวิธีนี้

Log.e("ApiUrl = ", "MyApiUrl") (error)
Log.w("ApiUrl = ", "MyApiUrl") (warning)
Log.i("ApiUrl = ", "MyApiUrl") (information)
Log.d("ApiUrl = ", "MyApiUrl") (debug)
Log.v("ApiUrl = ", "MyApiUrl") (verbose)

1

คุณสามารถใช้พจนานุกรมของฉันชื่อ RDALogger นี่คือ GitHub การเชื่อมโยง

ด้วยไลบรารีนี้คุณสามารถบันทึกข้อความของคุณด้วยชื่อวิธี / ชื่อคลาส / หมายเลขบรรทัดและลิงค์จุดยึด ด้วยลิงก์นี้เมื่อคุณคลิกบันทึกหน้าจอจะไปที่บรรทัดของรหัสนี้

ในการใช้ห้องสมุดคุณต้องดำเนินการด้านล่าง

ในระดับรากหญ้า

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

ในระดับแอปพลิเคชัน

dependencies {
            implementation 'com.github.ardakaplan:RDALogger:1.0.0'
    }

สำหรับการเริ่มต้นไลบรารีคุณควรเริ่มต้นเช่นนี้ (ใน Application.class หรือก่อนการใช้งานครั้งแรก)

RDALogger.start("TAG NAME").enableLogging(true);

และมากกว่าที่คุณสามารถบันทึกสิ่งที่คุณต้องการ;

    RDALogger.info("info");
    RDALogger.debug("debug");
    RDALogger.verbose("verbose");
    RDALogger.warn("warn");
    RDALogger.error("error");
    RDALogger.error(new Throwable());
    RDALogger.error("error", new Throwable());

และสุดท้ายผลลัพธ์จะแสดงให้คุณเห็นทุกอย่างที่คุณต้องการ (ชื่อคลาสชื่อเมธอดลิงก์จุดยึดข้อความ)

08-09 11:13:06.023 20025-20025/com.ardakaplan.application I/Application: IN CLASS : (ENApplication.java:29)   ///   IN METHOD : onCreate
    info

0
String one = object.getdata();
Log.d(one,"");

2
โดยปกติแล้วจะเป็นการดีกว่าที่จะอธิบายวิธีแก้ปัญหาแทนที่จะเพียงแค่โพสต์แถวของรหัสที่ไม่ระบุชื่อ คุณสามารถอ่านฉันจะเขียนคำตอบที่ดีได้อย่างไรและอธิบายคำตอบที่อิงกับรหัสทั้งหมด
Anh Pham

0

เมื่อเร็ว ๆ นี้ฉันพบวิธีนี้ในการเขียนบันทึกใน Android ซึ่งฉันคิดว่ายอดเยี่ยมมาก

public static final boolean FORCED_LOGGING = true;
private static final int CALLER_STACK_INDEX = 3;

public static void showLogs(String message) {
        if (FORCED_LOGGING) {
            StackTraceElement caller = Thread.currentThread().getStackTrace()[CALLER_STACK_INDEX];

            String fullClassName = caller.getClassName();
            String className = fullClassName.substring(fullClassName.lastIndexOf('.') + 1);
            String methodName = caller.getMethodName();
            int lineNumber = caller.getLineNumber();

            Log.i("*** " + className + "." + methodName + "():" + lineNumber + "\n" , message);
        }
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.