পাঠ্য ফাইলটিতে অ্যান্ড্রয়েড রাইটিং লগ


128

আমি আমার এই কোডটি ব্যবহার করে অ্যান্ড্রয়েড ফাইলে কাস্টম লগ। টেক্সট ফাইলটিতে লগগুলি লেখার চেষ্টা করছি তবে এই পদ্ধতিটি ফাইল তৈরি করে তবে এতে কিছুই নেই। মূলত আমি ফাইলটির পূর্ববর্তী সামগ্রীগুলি পড়তে চাই এবং তারপরে বিদ্যমান সামগ্রীর সাথে আমার ডেটা যুক্ত করতে চাই।

কোডটি নিম্নরূপ:

public static void write(String str) 
    {
        InputStream fileInputStream = null;
        FileOutputStream fileOutpurStream = null;
        try
        { 
            fileInputStream = new FileInputStream(file);
            fileOutpurStream = new FileOutputStream(file);
            if(file.exists())
            {
                int ch = 0;
                int current = 0;
                StringBuffer buffer = new StringBuffer();
                while((ch = fileInputStream.read()) != -1)
                {
                    buffer.append((char) ch);
                    current++;
                }
                byte data[]=new byte[(int)file.length()];
                fileInputStream.read(data);   
                fileOutpurStream.write(data);
                fileOutpurStream.write(str.getBytes(),0,str.getBytes().length);
                fileOutpurStream.flush();
            } 
            else
            {   
                file.createNewFile();
                fileOutpurStream.write(str.getBytes(),0,str.getBytes().length);
                fileOutpurStream.flush();
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                fileInputStream.close();
                fileOutpurStream.flush();
                fileOutpurStream.close();
                fileOutpurStream = null;
                fileInputStream = null;
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

উত্তর:


247

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

public void appendLog(String text)
{       
   File logFile = new File("sdcard/log.file");
   if (!logFile.exists())
   {
      try
      {
         logFile.createNewFile();
      } 
      catch (IOException e)
      {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
   try
   {
      //BufferedWriter for performance, true to set append to file flag
      BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true)); 
      buf.append(text);
      buf.newLine();
      buf.close();
   }
   catch (IOException e)
   {
      // TODO Auto-generated catch block
      e.printStackTrace();
   }
}

82
ম্যানিফেস্টে_সৌধিক_ স্টোরেজ লেখার জন্য অনুমতি যুক্ত করতে ভুলবেন না!
ভাইরাস

5
আমার buf.flush () যুক্ত করা দরকার ছিল; beforebuf.close (); তবে tjis ফাংশনটি ঠিক আমার যা প্রয়োজন ছিল তা ছিল। ধন্যবাদ
Csabi

1
কোথা থেকে আমার এই ফাংশনটি কল করা উচিত তাই এটি সমস্ত অ্যাপ্লিকেশনটির লগ ইন ফাইলটি লিখতে পারে ???
uniruddh

10
আমি কোডটি পুনর্গঠন করার পরামর্শ দেব যাতে এটি buf.close()একটি finallyব্লকের ভিতরে থাকে ।
উইলিয়াম দাম

2
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />@ ভাইরাসস 8 এর অর্থ অবশ্যই ছিল।
বেনগেট

29

সাধারণ এবং অ্যান্ড্রয়েড লগিংয়ে জাভা লগিংয়ে নতুন For

  1. Log4j জেনেরিক জাভা লগিং বাস্তবায়ন এবং বর্তমানে Apache সফ্টওয়্যার ফাউন্ডেশনের একটি প্রকল্প। এটি অ্যান্ড্রয়েড নির্দিষ্ট নয় এবং এর সাথে অ্যান্ড্রয়েডের সাথে কিছু অসুবিধাগুলি রয়েছে।
  2. এসএল 4 জে কোনও লগিং প্রয়োগ নয়, এটি একটি বিমূর্ত স্তর। এটি লোগোজেজের মতো নিজস্ব লগিং বাস্তবায়ন ব্যবহার করার চেষ্টা করে কোনও প্রকল্পের প্রতিটি তৃতীয় পক্ষের লাইব্রেরি নির্ভরতা যেমন পরিস্থিতি এড়াতে সহায়তা করে। উত্স

অ্যান্ড্রয়েডে txt এ লগ করার জন্য কয়েকটি বিকল্প নীচে রয়েছে

  1. ব্যবহার করুন logcat -fএই হিসেবে উত্তর ফাইলে লগইন করুন। নোট করুন যে অ্যান্ড্রয়েড ৪.২ থেকে, READ_LOGS অনুমতিটির কোনও প্রভাব নেই এবং প্রতিটি অ্যাপ্লিকেশন (ফোন রুট না করা) কেবল তার নিজস্ব লগগুলি পড়তে পারে। অসুবিধাগুলি এখানে লগক্যাট বাফারটি বিজ্ঞপ্তিযুক্ত এবং আকারের সীমা রয়েছে। আপনি আগের লগগুলি নাও পেতে পারেন।
  2. পূর্বের উত্তরের মতো মাইক্রোলজ 4 অ্যান্ড্রয়েড (অ্যান্ড্রয়েডের মতো মোবাইল ডিভাইসের জন্য লিখিত) ব্যবহার করুন । একটি উপায় থাকতে পারে, তবে আমি অনুমান করতে পারি না, অভ্যন্তরীণ স্টোরেজ অ্যাপ্লিকেশনটিতে লগিন করার জন্য কীভাবে মাইক্রোলজি 4 অ্যান্ড্রয়েড ব্যবহার করবেন। লগের পথের জন্য কেবলমাত্র বিকল্পটি ছিল এসডিকার্ডের মতো বহিরাগত স্টোরেজ এবং তাই আমি এটি ব্যবহার করতে পারিনি।
  3. অ্যান্ড্রয়েড-লগিং-লগ 4j এর সাহায্যে লগ 4j ব্যবহার করুন । অ্যান্ড্রয়েড-লগিং-লগ 4j কী করে? এটি Log4j কে দুটি ফাংশন দিয়ে অ্যান্ড্রয়েডে ব্যবহার করা সহজ করে তোলে।

    • লগিং ফাইলের পাশাপাশি লগক্যাটটিতে লগ প্রেরণের বিকল্প
    • লগ 4 জি কনফিগারেশন বিকল্পগুলি সেট করার জন্য একটি সহজ উপায় যেমন ফাইল পাথ, সর্বোচ্চ ফাইলের আকার, ব্যাকআপের সংখ্যা ইত্যাদি লগকনফিগুয়েটর ক্লাস সরবরাহ করে।

    নীচে সহজ উদাহরণ। loggerনীচের উদাহরণে লক্ষ্য করুন যে অবজেক্টটি একটি লোগোজেজ অবজেক্ট এবং কোনও অ্যান্ড্রয়েড-লগিং-লগ 4j ক্লাস নয়। সুতরাং অ্যান্ড্রয়েড-লগিং-লগ 4j কেবল লগ 4 জে কনফিগার করার জন্য ব্যবহৃত হয়।

  4. তবু লগব্যাক চেষ্টা করার জন্য । লগব্যাকটি একই ব্যক্তি দ্বারা বিকাশ করা হয়েছিল যিনি লগ 4 জে 1.x এবং এসএল 4 জে লাইব্রেরি নিয়ে এসেছিলেন। যদিও লগ 4 জে 2.x সম্পর্কিত নয়।

অ্যান্ড্রয়েডে লগ 4 জে ব্যবহারের পদক্ষেপ

  1. লগস ফোল্ডারে লগ 4j-1.2.x.jar এবং অ্যান্ড্রয়েড-লগিং-লগ 4j-1.0.3.jar উভয়ই যুক্ত করুন ।

  2. বাহ্যিক স্টোরেজ ব্যবহার করা হলেই অনুমতি যুক্ত করুন
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  3. Log4jসহায়ক শ্রেণি লিখুন

    package com.example.logger;
    
    import android.os.Environment;
    import de.mindpipe.android.logging.log4j.LogConfigurator;
    
    public class Log4jHelper {
        private final static LogConfigurator mLogConfigrator = new LogConfigurator();
    
        static {
            configureLog4j();
        }
    
        private static void configureLog4j() {
            String fileName = Environment.getExternalStorageDirectory() + "/" + "log4j.log";
            String filePattern = "%d - [%c] - %p : %m%n";
            int maxBackupSize = 10;
            long maxFileSize = 1024 * 1024;
    
            configure( fileName, filePattern, maxBackupSize, maxFileSize );
        }
    
        private static void configure( String fileName, String filePattern, int maxBackupSize, long maxFileSize ) {
            mLogConfigrator.setFileName( fileName );
            mLogConfigrator.setMaxFileSize( maxFileSize );
            mLogConfigrator.setFilePattern(filePattern);
            mLogConfigrator.setMaxBackupSize(maxBackupSize);
            mLogConfigrator.setUseLogCatAppender(true);
            mLogConfigrator.configure();
    
        }
    
        public static org.apache.log4j.Logger getLogger( String name ) {
            org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger( name );
            return logger;
        }
    }
  4. ক্রিয়াকলাপ ক্লাসে

    org.apache.log4j.Logger log= Log4jHelper.getLogger( "YourActivity" );
    log.error("Error");
    log.info("Info");
    log.warn("Warn");

উদাহরণ উত্স । মনে রাখবেন যে, লগ 4 জে 2.x (উন্নত ক্রিয়াকলাপগুলি) স্ক্র্যাচ থেকে পুনর্লিখিত লগ 4 জে 1.x এর সাথে পিছনে তুলনীয় নয়। সুতরাং আপনাকে অ্যান্ড্রয়েড-লগিং-লগ 4 জারের সাথে লগ 4 জে 1.2.x জারটি ব্যবহার করতে হবে। আমি অ্যাপ্লিকেশন অভ্যন্তরীণ ফাইলে লগ করতে এবং পরে ফাইলটি ইমেল করতে সক্ষম হয়েছিsetReadable(true, false)


24

microlog4android আমার জন্য কাজ করে তবে ডকুমেন্টেশনটি খুব খারাপ। তাদের কেবলমাত্র যা যুক্ত করা দরকার তা এটি একটি দ্রুত প্রারম্ভিক টিউটোরিয়াল

এখানে আমি পেয়েছি একটি দ্রুত টিউটোরিয়াল।

  1. আপনার মূল কার্যকলাপে নিম্নলিখিত স্থিতিশীল পরিবর্তনশীল যুক্ত করুন:

    private static final Logger logger = LoggerFactory.getLogger();
  2. আপনার onCreate()পদ্ধতিতে নিম্নলিখিতগুলি যুক্ত করুন :

    PropertyConfigurator.getConfigurator(this).configure();
  3. নামের একটি ফাইল তৈরি করুন microlog.propertiesএবং এটি assetsডিরেক্টরিতে সঞ্চয় করুন

  4. microlog.propertiesফাইলটি নিম্নরূপে সম্পাদনা করুন :

    microlog.level=DEBUG
    microlog.appender=LogCatAppender;FileAppender
    microlog.formatter=PatternFormatter
    microlog.formatter.PatternFormatter.pattern=%c [%P] %m %T
  5. এর মতো লগিং স্টেটমেন্ট যুক্ত করুন:

    logger.debug("M4A");

প্রতিটি শ্রেণীর জন্য আপনি 1 তে নির্দিষ্ট হিসাবে একটি লগার অবজেক্ট তৈরি করুন)

6. আপনি নিম্নলিখিত অনুমতি যোগ করা যেতে পারে:

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

টিউটোরিয়াল জন্য উত্স এখানে


4
ফাইলঅ্যাপেন্ডার আপনার এসডকার্ডে "microlog.txt" একটি ফাইল তৈরি করবে (আমার ক্ষেত্রে পুরো পথ "/ sdcard/microlog.txt)।
রুসলান ইয়ানচিশান

2
এই দ্রুত টিউটোরিয়ালটি মাইক্রোলজি 4 অ্যান্ড্রয়েড অফিসিয়াল ডকুমেন্টেশনের অংশ হওয়া উচিত।
জোহান কার্লসন

ত্রুটি: অ্যান্ড্রয়েড ডেক্স: [প্রকল্প] ?

10

সতর্কতা: আমি আপনাকে পুরোপুরি ভুল বুঝাবুঝি করছি, তবে আপনি যদি চান এমন সমস্ত লগ ফাইল হয় তবে কেন ঘাম?

এটি একটি ব্যাট ফাইলে রাখুন (আপনার সরঞ্জাম ডিরেক্টরিতে পথ পরিবর্তন করুন এবং আপনার অ্যাপ্লিকেশন অবশ্যই আপনার অ্যাপের নাম):

cd "C:\devAndroid\Software\android-sdk-windows-1.6_r1\android-sdk-windows-1.6_r1\tools"
adb logcat -v time   ActivityManager:W  yourappname:D  *:W >"C:\devAndroid\log\yourappname.log"

তারপরে আপনার কোডে ঠিক এর মতো কিছু করুন:

Log.d("yourappname", "Your message");

লগটি তৈরি করতে, ইউএসবি কেবলটি সংযুক্ত করুন এবং আপনার ব্যাট ফাইলটি চালান।

শুভেচ্ছা সহ


Android.util.Log আমদানি করতে ভুলবেন না।
স্পাইডি

এটি "ত্রুটি: একাধিক ডিভাইস এবং এমুলেটর - ডিভাইসের জন্য অপেক্ষা করা -" এবং আরও কিছু না ফেরায়। কিছু ভুল আছে?
ইরোস

20
আপনি যদি অ্যাপ্লিকেশনটি চালনার সময় কোনও পিসির কাছে না থাকেন তবে কীভাবে এটি কাজ করবে?
ডিডিএসপোর্টস

@ ডিডিএসপোর্টস এটি করে না। তবে তিনি প্রশ্নের মর্ম বুঝতে পারলেন না
Ewoks

@ ডিডিএসপোর্টস আপনি ওয়াইফাই এর উপরে অ্যাডবি ব্যবহার করতে পারেন।
ড্যানিয়েল এফ

8

Slf4android lib ব্যবহার করুন ।
এটি slf4j এপিআই এর সহজ বাস্তবায়ন অ্যান্ড্রয়েড java.util.logging ব্যবহার করে। *।

বৈশিষ্ট্য:

  • বক্স থেকে ফাইল আউট লগিং
  • দ্বারা অন্য কোনও গন্তব্য লগ ইন LoggerConfiguration.configuration().addHandlerToLogger
  • ইমেলের মাধ্যমে স্ক্রিনশট সহ লগগুলি প্রেরণ করতে আপনার ডিভাইসকে নাড়া দিন
  • সত্যিই ছোট, এটি কেবল k 55 কেবি ks

slf4android মূলত @miensol দ্বারা বজায় থাকে

আমাদের ব্লগে slf4android সম্পর্কে আরও পড়ুন:


7

আপনার উচিত মাইক্রোলজ 4 অ্যান্ড্রয়েড। তাদের একটি ফাইল লগ ইন করার জন্য একটি সমাধান প্রস্তুত আছে।

http://code.google.com/p/microlog4android/


12
এটি একটি ভাল লাইব্রেরির মতো মনে হয় তবে ডকুমেন্টেশনটি ভয়ানক। আমি কীভাবে এটি কাজ করতে পারি তা সহজেই অনুধাবন করতে পারিনি এবং নিজেই কিছু মিলিয়ে শেষ করেছিলাম।
পল ল্যামার্টসমা

@ পলল্যামার্টসমা: আমি মনে করি যে আপনি মাইক্রোলজ ৪ অ্যান্ড্রয়েডের পরিবর্তে অবদান রেখেছিলেন তা ভাল লাগবে। এফওয়াইআই: এটিতে লগ 4 জে'র মতো একই এপিআই রয়েছে। খারাপ ডকুমেন্টেশন সম্পর্কে দুঃখিত।
জোহান কার্লসন

@ পল ল্যামার্টসমা এটির ডকুমেন্টেশন যদি আপনি এটি ব্যবহার করতে না পারেন তবে খারাপ কিছু হলে কীভাবে ভাল হতে পারে? আপনি যদি এটি কাজ করতে না পারেন তবে এটি বাজে।
অবিশ্বাস্য জানুয়ারী

7

এটি দেরিতে হতে পারে তবে আশা করি এটি সাহায্য করতে পারে .. চেষ্টা করে দেখুন ...

public void writefile()
    {
        File externalStorageDir = Environment.getExternalStorageDirectory();
        File myFile = new File(externalStorageDir , "yourfilename.txt");

        if(myFile.exists())
        {
           try
           {

        FileOutputStream fostream = new FileOutputStream(myFile);
        OutputStreamWriter oswriter = new OutputStreamWriter(fostream); 
        BufferedWriter bwriter = new BufferedWriter(oswriter);   
        bwriter.write("Hi welcome ");
        bwriter.newLine();            
        bwriter.close(); 
        oswriter.close(); 
        fostream.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
        else
        {
            try {
                myFile.createNewFile();
            }
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }

এখানে bfwritter.newlineফাইলটিতে আপনার পাঠ্য লিখুন। এবং অনুমতি যোগ করুন

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

ব্যর্থতা ছাড়াই আপনার ম্যানিফেস্ট ফাইলে।


6

কমান্ড লাইনের উপায়ে নিম্নলিখিত পিস কোড দিয়ে এই সমস্যাটি সমাধান করেছি:

File outputFile = new File("pathToFile"); 
Runtime.getRuntime().exec("logcat -c");
Runtime.getRuntime().exec("logcat -v time -f " + outputFile.getAbsolutePath())

যেখানে "সময়" বিকল্পটি তারিখের জন্য মেটাডেটা ক্ষেত্রের বিশদ যুক্ত করে, প্রার্থনার সময়, অগ্রাধিকার / ট্যাগ এবং বার্তা জারি করার প্রক্রিয়াটির পিআইডি।

তারপরে আপনার কোডে ঠিক এর মতো কিছু করুন (android.util.Log ব্যবহার করে):

Log.d("yourappname", "Your message");

4
চমত্কারভাবে কাজ করে যখন adbসংযুক্ত করা হয়, কিন্তু যখন ডিভাইসটি স্বতন্ত্র মোডে থাকে না কাজ করে। আমি এটি উত্পাদনে ব্যবহার করব না, তবে এটি ডিবাগ মোডের একটি সহজ সমাধান।
জুলিয়েন ক্রোনেগ

2

সাধারণভাবে, স্ট্রিমটি খোলার আগে আপনার অবশ্যই একটি ফাইল হ্যান্ডেল থাকা উচিত। অন্য ব্লকটিতে createNewFile () এর আগে আপনার কাছে একটি ফাইলআউটপুটস্ট্রিম হ্যান্ডেল রয়েছে । স্ট্রিমটি উপস্থিত না থাকলে ফাইলটি তৈরি করে না।

প্রকৃতপক্ষে অ্যান্ড্রয়েড নির্দিষ্ট নয়, তবে এই উদ্দেশ্যে এটি প্রচুর আইও। আপনি যদি একের পর এক "লিখন" অপারেশন করেন? আপনি পুরো বিষয়বস্তু পড়বেন এবং পুরো বিষয়বস্তু লিখবেন, সময় লাগবে এবং আরও গুরুত্বপূর্ণভাবে ব্যাটারির জীবন।

আমি java.io.RandomAccessFile ব্যবহার করার পরামর্শ দিচ্ছি, () এর শেষ পর্যন্ত অনুসন্ধান করুন, তারপরে সংযোজন করার জন্য রাইটচারার () লিখুন। এটি অনেক ক্লিনার কোড এবং সম্ভবত আরও দ্রুত হবে।


2

আমি একটি সাধারণ, লাইটওয়েট শ্রেণি তৈরি করেছি (প্রায় 260 এলওসি) যা স্ট্যান্ডার্ড অ্যান্ড্রয়েড.ইউটি.লগ প্রয়োগ করতে পারে ফাইল ভিত্তিক লগিংয়ের সাথে
লোগ প্রয়োগ: প্রতিটি লগ বার্তাটি android.util.Log এর মাধ্যমে লগ হয় এবং ডিভাইসে কোনও পাঠ্য ফাইলে লিখিত থাকে।

আপনি এটি গিথুব এ খুঁজে পেতে পারেন:
https://github.com/volkerv/FileLog


1
আপনার কাজটি ইউআই থ্রেডে ফাইল অপারেশনগুলি করা হচ্ছে না তা আমাদের নিশ্চিত করতে হবে thing আমাদের কাছে ফাইল লগিংয়ের বিশাল পরিমাণ রয়েছে?
জয়শিল ডেভ

2

দীর্ঘ তদন্তের পরে আমি দেখতে পেলাম যে:

  • android.util.Log ডিফল্ট ব্যবহার দ্বারা java.util.logging.Logger
  • এর ব্যবহারের উদাহরণ পেতে লগগ্যাক loggerনাম সহ ""ব্যবহার করেLogManager.getLogManager().getLogger("")
  • অ্যানড্রইড ডিভাইস Logcat যোগ loggerদৃষ্টান্ত com.android.internal.logging.AndroidHandlerডিবাগ অ্যাপস চালনার পরে
  • কিন্তু !!! com.android.internal.logging.AndroidHandlerলগকটে বার্তা মুদ্রণ করে কেবলমাত্র java.util.logging.Level.INFO( Level.INFO, Level.WARNING, Level.SEVERE, Level.OFF) এর মতো স্তর সহ

সুতরাং ফাইল যুক্ত করতে লগ লিখতে কেবল rootLogger "" একটি অ্যাড যোগ করুন java.util.logging.FileHandler:

  class App : Application{
    override fun onCreate() {
      super.onCreate()
      Log.d(TAG, printLoggers("before setup"))

      val rootLogger = java.util.logging.LogManager.getLogManager().getLogger("")
      val dirFile = destinationFolder
      val file = File(dirFile,"logFile.txt")
      val handler = java.util.logging.FileHandler(file.absolutePath, 5* 1024 * 1024/*5Mb*/, 1, true)
      handler.formatter = AndroidLogFormatter(filePath = file.absolutePath)

      rootLogger?.addHandler(handler)

      Log.d(TAG, printLoggers("after setup"))
    }
  }

val destinationFolder: File
        get() {
            val parent = 
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absoluteFile
            val destinationFolder = File(parent, "MyApp")
            if (!destinationFolder.exists()) {
                destinationFolder.mkdirs()
                destinationFolder.mkdir()
            }
            return destinationFolder
        }
class AndroidLogFormatter(val filePath: String = "", var tagPrefix: String = "") : Formatter() {

    override fun format(record: LogRecord): String {
        val tag = record.getTag(tagPrefix)
        val date = record.getDate()
        val level = record.getLogCatLevel()
        val message = record.getLogCatMessage()
        return "$date $level$tag: $message\n"
    }
}

fun LogRecord.getTag(tagPrefix: String): String {
    val name = loggerName
    val maxLength = 30
    val tag = tagPrefix + (if (name.length > maxLength) name.substring(name.length - maxLength) else name)
    return tag
}

fun LogRecord.getDate(): String? {
    return Date(millis).formatedBy("yyyy-MM-dd HH:mm:ss.SSS")
}

fun Date?.formatedBy(dateFormat: String): String? {
    val date = this
    date ?: return null
    val writeFormat = SimpleDateFormat(dateFormat, Locale.getDefault()) //MM в HH:mm
    return writeFormat.format(date)
}

fun LogRecord.getLogCatMessage(): String {
    var message = message

    if (thrown != null) {
        message += Log.getStackTraceString(thrown)
    }
    return message
}

fun Int.getAndroidLevel(): Int {
    return when {
        this >= Level.SEVERE.intValue() -> { // SEVERE
            Log.ERROR
        }
        this >= Level.WARNING.intValue() -> { // WARNING
            Log.WARN
        }
        this >= Level.INFO.intValue() -> { // INFO
            Log.INFO
        }
        else -> {
            Log.DEBUG
        }
    }
}

fun LogRecord.getLogCatLevel(): String {
    return when (level.intValue().getAndroidLevel()) {
        Log.ERROR -> { // SEVERE
            "E/"
        }
        Log.WARN -> { // WARNING
            "W/"
        }
        Log.INFO -> { // INFO
            "I/"
        }
        Log.DEBUG -> {
            "D/"
        }
        else -> {
            "D/"
        }
    }
}

fun getLoggerLevel(level: Int): Level {
    return when (level) {
        Log.ERROR -> { // SEVERE
            Level.SEVERE
        }
        Log.WARN -> { // WARNING
            Level.WARNING
        }
        Log.INFO -> { // INFO
            Level.INFO
        }
        Log.DEBUG -> {
            Level.FINE
        }
        else -> {
            Level.FINEST
        }
    }
}

আপনার অ্যাপ্লিকেশনে সমস্ত লগার মুদ্রণ করতে ব্যবহার করুন:

Log.e(TAG, printLoggers("before setup"))

 private fun printLoggers(caller: String, printIfEmpty: Boolean = true): String {
        val builder = StringBuilder()
        val loggerNames = LogManager.getLogManager().loggerNames
        builder.appendln("--------------------------------------------------------------")
        builder.appendln("printLoggers: $caller")
        while (loggerNames.hasMoreElements()) {
            val element = loggerNames.nextElement()
            val logger = LogManager.getLogManager().getLogger(element)
            val parentLogger: Logger? = logger.parent
            val handlers = logger.handlers
            val level = logger?.level
            if (!printIfEmpty && handlers.isEmpty()) {
                continue
            }
            val handlersNames = handlers.map {
                val handlerName = it.javaClass.simpleName
                val formatter: Formatter? = it.formatter
                val formatterName = if (formatter is AndroidLogFormatter) {
                    "${formatter.javaClass.simpleName}(${formatter.filePath})"
                } else {
                    formatter?.javaClass?.simpleName
                }
                "$handlerName($formatterName)"
            }
            builder.appendln("level: $level logger: \"$element\" handlers: $handlersNames parentLogger: ${parentLogger?.name}")
        }
        builder.appendln("--------------------------------------------------------------")
        return builder.toString()
    }

ওহে. এই লগার ব্যবহার করে কী লাভ হবে। আমি কাস্টম লগারের সাথে কোনও পার্থক্য দেখছি না। বা আমি কিছু মিস করছি?
শাবী

1

এই রূপটি অনেক খাটো

চেষ্টা করুন
    চূড়ান্ত ফাইল পাথ = নতুন ফাইল (
            পরিবেশ।
    যদি (! path.exists ()) {
        path.mkdir ();
    }
    Runtime.getRuntime ()। Exec (
            "logcat -d -f" + পথ + ফাইল.স্যাপারেটর
                    + "ডিবিও_লগক্যাট"
                    + ".txt");
} ধরা (আইওএক্সেপশন ই) {
    e.printStackTrace ();
}

1

আমার লেখা লাইব্রেরি আপনি ব্যবহার করতে পারেন। এটি ব্যবহার করা খুব সহজ:

আপনার গ্রেড ফাইলটিতে এই নির্ভরতা যুক্ত করুন:

dependencies {
    compile 'com.github.danylovolokh:android-logger:1.0.2'
}

অ্যাপ্লিকেশন শ্রেণিতে পাঠাগারটি শুরু করুন:

File logsDirectory = AndroidLogger.getDefaultLogFilesDirectory(this);
    int logFileMaxSizeBytes = 2 * 1024 * 1024; // 2Mb
    try {
        AndroidLogger.initialize(
                this,
                logsDirectory,
                "Log_File_Name",
                logFileMaxSizeBytes,
                false
                );
    } catch (IOException e) {
        // Some error happened - most likely there is no free space on the system
    }

আপনি গ্রন্থাগারটি এভাবে ব্যবহার করেন:

AndroidLogger.v("TAG", "Verbose Message");

এবং এইভাবে লগগুলি পুনরুদ্ধার করবেন:

AndroidLogger.processPendingLogsStopAndGetLogFiles(new AndroidLogger.GetFilesCallback() {
        @Override
        public void onFiles(File[] logFiles) {
            // get everything you need from these files
            try {
                AndroidLogger.reinitAndroidLogger();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

এখানে আরও তথ্যের সাথে গিথুব পৃষ্ঠার লিঙ্কটি রয়েছে: https://github.com/danylovolokh/AndroidLogger

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


1

লগ 4 জে পূর্ববর্তী সংস্করণগুলির অনেকগুলি এখনই কাজ করে না (05/2019)। তবে আপনি হাইপারলগ ব্যবহার করতে পারেন - আমি এটি কাজ করে তা নিশ্চিত করতে পারি।

  1. আপনার নির্ভরতা ও সিঙ্ক প্রকল্পে এই লাইনটি যুক্ত করুন

    implementation 'com.hypertrack:hyperlog:0.0.10'
  2. একটি নতুন অ্যাপ্লিকেশন শ্রেণি তৈরি করুন (একটি নতুন জাভা বর্গ তৈরি করুন এবং অ্যাপ্লিকেশন প্রসারিত করুন)। তারপরে অনক্রিট পদ্ধতিতে এই লাইনগুলি যুক্ত করুন:

    HyperLog.initialize(this);
    HyperLog.setLogLevel(Log.VERBOSE);
    
    HyperLog.getDeviceLogsInFile(this);
  3. অ্যাপ্লিকেশন ফাইল সংজ্ঞায়িত করতে ম্যানিফেস্ট ফাইল পরিবর্তন করুন।

    <application
        android:name=".AppClass"
        .....
  4. লগতে বিভিন্ন উপায়:

    HyperLog.d(TAG,"debug");
    HyperLog.i(TAG,"information");
    HyperLog.e(TAG,"error");
    HyperLog.v(TAG,"verbose");
    HyperLog.w(TAG,"warning");
    HyperLog.a(TAG,"assert");
    HyperLog.exception(TAG,"exception",throwable);
  5. আপনার লগ ফাইলগুলি সন্ধান করুন। নেভিগেট করুন

    RootFolder/android/data/"appPackageName/LogFiles/

হাইপারলগ.গেট ডেভিস লোগসইনফাইলে (এটি) দিয়ে উত্পন্ন ফাইলটিতে আমি এই লাইব্রেরিটি চেষ্টা করেছি; কেবলমাত্র শেষ উত্পন্ন
লগটিই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.