আমি কীভাবে কোনও অ্যান্ড্রয়েড ডিভাইস থেকে লগফিল পেতে পারি?


129

আমি একটি ডিভাইস থেকে লগ ফাইলটি আমার পিসিতে টানতে চাই। আমি এটা কিভাবে করবো?

উত্তর:


112

লগক্লেলেক্টর একটি ভাল বিকল্প তবে আপনাকে প্রথমে এটি ইনস্টল করতে হবে।

আমি যখন মেইলের মাধ্যমে প্রেরণের জন্য লগফিল পেতে চাই, আমি সাধারণত নিম্নলিখিতগুলি করি:


এই কমান্ডলাইনটি আমার পক্ষে কাজ করে না, আমি এই আউটপুটটি পাই। লগক্যাট পড়ুন: অবৈধ যুক্তি
নিউনি

5
নোট করুন যে লগক্লোলেক্টর ৪.১-র উপরে অ্যান্ড্রয়েডের সংস্করণগুলির জন্য কাজ করে না কারণ অ্যাপ্লিকেশনগুলিকে এখন কেবল তাদের নিজস্ব লগ এন্ট্রি পড়ার অনুমতি দেওয়া হয়েছে। ( groups.google.com/forum/#!topic/android-log-collector/… )
ম্যাথু লো 2

11
অ্যাডবি বা এর মতো কিছু ইনস্টল করার প্রয়োজন ছাড়াই কোনও সহজ পদ্ধতি, USB বাহির মাধ্যমে বাহ্যিক স্টোরেজ ডিভাইস হিসাবে একবার যুক্ত হয়ে গেলে ডিভাইস থেকে লগফিলটি টানানোর কোনও উপায় নেই?
বা ম্যাপার

আপনি চালানোর জন্য সঠিক ডিরেক্টরিতে রয়েছেন তা নিশ্চিত করুন adb। সাধারণতC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
লোলোলোলল ওল

30

আমি আশা করি এই কোডটি কাউকে সহায়তা করবে। ডিভাইস থেকে কীভাবে লগ ইন করতে হবে তা নির্ধারণ করতে আমার 2 দিন সময় নিয়েছিল এবং তারপরে এটি ফিল্টার করে:

public File extractLogToFileAndWeb(){
        //set a file
        Date datum = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY);
        String fullName = df.format(datum)+"appLog.log";
        File file = new File (Environment.getExternalStorageDirectory(), fullName);

        //clears a file
        if(file.exists()){
            file.delete();
        }


        //write log to file
        int pid = android.os.Process.myPid();
        try {
            String command = String.format("logcat -d -v threadtime *:*");        
            Process process = Runtime.getRuntime().exec(command);

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuilder result = new StringBuilder();
            String currentLine = null;

            while ((currentLine = reader.readLine()) != null) {
                   if (currentLine != null && currentLine.contains(String.valueOf(pid))) {
                       result.append(currentLine);
                       result.append("\n");
                    }
            }

            FileWriter out = new FileWriter(file);
            out.write(result.toString());
            out.close();

            //Runtime.getRuntime().exec("logcat -d -v time -f "+file.getAbsolutePath());
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        }


        //clear the log
        try {
            Runtime.getRuntime().exec("logcat -c");
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        }

        return file;
    }

@ মেহডোক দ্বারা নির্দেশিত হিসাবে

লগগুলি পড়ার জন্য ম্যানিফেস্টে অনুমতি যুক্ত করুন

<uses-permission android:name="android.permission.READ_LOGS" />

1
এটি দুর্দান্ত কাজ করে তবে আপনার প্রয়োজন প্রতিটি ডিভাইসে কাজ করতে<uses-permission android:name="android.permission.READ_LOGS" />
মেহডোক

27

আমি এই ধরণের কিছু ব্যবহার করব:

$adb logcat -d > logcat.txt

-D বিকল্পটি পাঠ্য ফাইলে পুরো বৃত্তাকার বাফারটি ডাম্প করে দেয় এবং যদি আপনি কোনও নির্দিষ্ট ক্রিয়া / অভিপ্রায় চেষ্টা খুঁজছেন

$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt

আশাকরি এটা সাহায্য করবে :)


13

ইউএসবি ডিবাগিং বা ব্যবহারে আগ্রহী নয় তাদের পক্ষে adbআরও সহজ সমাধান রয়েছে। অ্যান্ড্রয়েড 6 এ (পূর্ববর্তী সংস্করণ সম্পর্কে নিশ্চিত নয়) বিকাশকারী সরঞ্জামগুলির অধীনে একটি বিকল্প রয়েছে: বাগ রিপোর্টটি নিন

এই বিকল্পটি ক্লিক করা একটি বাগ রিপোর্ট প্রস্তুত করবে এবং ড্রাইভ করতে বা এটি ইমেলের মাধ্যমে প্রেরণে সংরক্ষণ করার অনুরোধ জানাবে।

আমি এটি লগ পাওয়ার সবচেয়ে সহজ উপায় বলে মনে করি। আমি ইউএসবি ডিবাগিং চালু করতে পছন্দ করি না।


1
ঠিক আমি খুঁজছেন ছিল কি!
ওয়াইয়ামিল

1
আমি এটি ঠিক কোথায় খুঁজে পাই?
gurehbgui

11

সম্পাদনা করুন:

অভ্যন্তরীণ লগ স্মৃতিতে একটি বৃত্তাকার বাফার। প্রত্যেকটির জন্য আসলে এই ধরণের কয়েকটি বিজ্ঞপ্তি বাফার রয়েছে: রেডিও, ইভেন্টগুলি, প্রধান। ডিফল্ট মূল।

বাফারের একটি অনুলিপি পেতে, একটি কৌশলটিতে ডিভাইসে একটি কমান্ড কার্যকর করা এবং স্ট্রিং ভেরিয়েবল হিসাবে আউটপুট প্রাপ্ত করা অন্তর্ভুক্ত।

সেন্ডলগ একটি ওপেন সোর্স অ্যাপ্লিকেশন যা কেবল এটি করে: http://www.l6n.org/android/sendlog.shtml

logcatএম্বেড থাকা ওএসে ডিভাইসে চালিত করা কীটি হ'ল । এটি যতটা শোনাচ্ছে ততটা শক্ত নয়, কেবল লিঙ্কটিতে ওপেন সোর্স অ্যাপ্লিকেশনটি দেখুন।


এটি আউটপুটটিকে স্ক্রিনে ফেলে দেয়, এটি আমার একটি ফাইলে দরকার।
পেন্টিয়াম

আপনি লোগ্যাট সহ লগগুলি প্রেরণ করতে পারেন। অথবা কেবল ডিডিএমএস থেকে অনুলিপি-পেস্ট করুন: পি
মোলানর্ম

@ মোলনারম আমি স্বীকার করেছি যে আমার উত্তরটি কিছুটা বেশি ইঞ্জিনিয়ারড ছিল যদি তার দরকার হয় তবে =)
ব্র্যাড হেইন

@ ব্র্যাডহেইন আপনি বলেছেন সেন্ডলগ ওপেন সোর্স তবে আমি উত্স কোডটি খুঁজে পাচ্ছি না। কোন ধারণা এটি কোথায়?
স্মিথ 324

8

প্রায়শই আমি ত্রুটি পাই " logcat read: Invalid argument"। লগ থেকে পড়ার আগে আমাকে লগটি সাফ করতে হয়েছিল।

আমি এটি পছন্দ করি:

prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt

ধন্যবাদ! আমার দীর্ঘদিন ধরে ত্রুটি ছিল, সেই লগক্যাটটি ততক্ষণে এটি ঠিক করে দিয়েছে!
জর্ডস

4

একটি সহজ উপায় হ'ল বাজার থেকে আপনার নিজস্ব লগ সংগ্রহকারী পদ্ধতি বা এমনকি একটি বিদ্যমান লগ সংগ্রহকারী অ্যাপ্লিকেশন।

আমার অ্যাপ্লিকেশনগুলির জন্য আমি একটি প্রতিবেদন কার্যকারিতা তৈরি করেছি যা আমার ইমেলটিতে লগগুলি প্রেরণ করে (বা অন্য কোনও জায়গায়ও - একবার লগ পেয়ে গেলে আপনি এটি দিয়ে চাইলে করতে পারেন)।

ডিভাইস থেকে লগ ফাইলটি কীভাবে পাবেন সে সম্পর্কে এখানে একটি সাধারণ উদাহরণ:



3

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি এখনও 2018 সালে এটি বৈধ বিশ্বাস করি।

প্রতিটি অ্যান্ড্রয়েড ডিভাইসে বিকাশকারী বিকল্পগুলিতে লুকিয়ে থাকা একটি বাগ রিপোর্ট নেওয়ার বিকল্প রয়েছে ।

দ্রষ্টব্য: এটি পুরো সিস্টেম লগ ডাম্প করবে

কীভাবে বিকাশকারী বিকল্পগুলি সক্ষম করবেন? দেখুন: https://developer.android.com/studio/debug/dev-options

আমার জন্য কি কাজ করে:

  1. আপনার ডিভাইসটি পুনরায় চালু করুন (বিকাশকারী বিশ্লেষণের জন্য ন্যূনতম আবর্জনার লগ তৈরি করতে)
  2. আপনার বাগ পুনরুত্পাদন
  3. সেটিংসে যান -> বিকাশকারী বিকল্পসমূহ -> একটি বাগ রিপোর্ট নিন
  4. লগগুলি সংগ্রহ করার জন্য অ্যান্ড্রয়েড সিস্টেমের জন্য অপেক্ষা করুন (বিজ্ঞপ্তিতে অগ্রগতি দেখুন)
  5. এটি সম্পূর্ণ হয়ে গেলে, ভাগ করার জন্য বিজ্ঞপ্তিটি আলতো চাপুন (আপনি জিমেইল বা হুইটার ব্যবহার করতে পারেন)

এটা কিভাবে পড়বেন? খোলা বার্জপোর্ট-1960-01-01-HH-MM-ss.txt

আপনি সম্ভবত এর মতো কিছু সন্ধান করতে চান:

------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of crash
06-13 14:37:36.542 19294 19294 E AndroidRuntime: FATAL EXCEPTION: main

বা:

------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main

2

ব্যবহারকারীর জন্য ধন্যবাদ 1354692 আমি এটি আরও সহজ করতে পারলাম, কেবল একটি লাইনের সাথে! তিনি যে মন্তব্য করেছেন:

try {
    File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
    Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}

এই কোডটি দেওয়ার সবচেয়ে ভাল জায়গাটি কোথায়? ভিতরে OnCreate?
ইয়ংজা

2

আমি ইমেল দ্বারা লগগুলি পুনরুদ্ধার করতে একটি ছোট গ্রন্থাগার (.aar) তৈরি করেছি। আপনি এটি Gmail অ্যাকাউন্টগুলির সাথে ব্যবহার করতে পারেন। এটি বেশ সহজ তবে কাজ করে। আপনি এখান থেকে একটি অনুলিপি পেতে পারেন

সাইটটি স্প্যানিশ ভাষায়, তবে পণ্যের বর্ণনার ইংরেজি সংস্করণ সহ একটি পিডিএফ রয়েছে।

আমি আশা করি এটি সাহায্য করতে পারে।


2

দুটি পদক্ষেপ:

  • লগ তৈরি করুন
  • লগ পাঠাতে জিমেইল লোড করুন

  1. লগ তৈরি করুন

    File generateLog() {
        File logFolder = new File(Environment.getExternalStorageDirectory(), "MyFolder");
        if (!logFolder.exists()) {
            logFolder.mkdir();
        }
        String filename = "myapp_log_" + new Date().getTime() + ".log";
    
        File logFile = new File(logFolder, filename);
    
        try {
            String[] cmd = new String[] { "logcat", "-f", logFile.getAbsolutePath(), "-v", "time", "ActivityManager:W", "myapp:D" };
            Runtime.getRuntime().exec(cmd);
            Toaster.shortDebug("Log generated to: " + filename);
            return logFile;
        }
        catch (IOException ioEx) {
            ioEx.printStackTrace();
        }
    
        return null;
    }
  2. লগ পাঠাতে জিমেইল লোড করুন

    File logFile = generateLog();
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile));
    intent.setType("multipart/");
    startActivity(intent);

# 1 এর জন্য রেফারেন্স

~~

# 2 এর জন্য - লগ ফাইলটি দেখতে এবং প্রেরণের জন্য কীভাবে লোড করা যায় সে সম্পর্কে অনেকগুলি আলাদা উত্তর রয়েছে। শেষ অবধি, সমাধানটি এখানে উভয়ের পক্ষে কাজ করেছে:

  • বিকল্প হিসাবে জিমেইল লোড করুন
  • সফলভাবে ফাইল সংযুক্ত করে

সঠিকভাবে কাজের উত্তরের জন্য https://stackoverflow.com/a/22367055/2162226 ধন্যবাদ জানাই


0

প্রথমে অ্যান্ড্রয়েড এসডিকে প্ল্যাটফর্ম-সরঞ্জামগুলিতে PATH নির্ধারণ করে adb কমান্ড কার্যকর করা যায় তা নিশ্চিত করুন:

export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH

তারপরে চালান:

adb shell logcat > log.txt

বা প্রথম এডিবি প্ল্যাটফর্ম-সরঞ্জামগুলিতে যান:

cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools 

তারপর চালান

./adb shell logcat > log.txt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.