扩展 Android.util.Log 以写入文件

Posted

技术标签:

【中文标题】扩展 Android.util.Log 以写入文件【英文标题】:extend Android.util.Log to write to file 【发布时间】:2013-09-10 08:29:09 【问题描述】:

我想扩展android.util.Log 类,使其也写入设备内部存储中的日志文件,最好也写入特定的TAGS

我目前有一个实现:

public class CustomLogger

private final static Logger fileLog = Logger.getLogger(MainActivity.class);
private Context context;

public CustomLogger(Context c)
    this.context = c;

    final LogConfigurator logConfigurator = new LogConfigurator();
    logConfigurator.setFileName(context.getFilesDir() + File.separator + "myApp.log");
    logConfigurator.setRootLevel(Level.DEBUG);
    logConfigurator.setLevel("org.apache", Level.ERROR);
    logConfigurator.configure();


public void i(String TAG, String message)

    // Printing the message to LogCat console
    Log.i(TAG, message);

    // Write the log message to the file
    fileLog.info(TAG+": "+message);


public void d(String TAG, String message)
    Log.d(TAG, message);
    fileLog.debug(TAG+": "+message);
  
  

正如您所见,此自定义记录器记录到内部存储上的日志文件(使用android-logging-log4j 库)和通过android.util.Log 类。 但是我想在我的日志文件中使用来自android.util.Log 类的标准日志条目,如果可能的话,只需要某些(自定义)TAGS

任何人有一个例子或任何好的提示来达到这个目标?

提前致谢

【问题讨论】:

Write android logcat data to a file的可能重复 【参考方案1】:

您可以通过编程方式读取 log cat 并将其存储到文本文件中,也可以将其发送到任何您想要的地方。

下面是我写的详细文章:

Read & Store Log-cat Programmatically in Android

为了阅读 logcat,这里是示例代码:

public class LogTest extends Activity 
 
    private StringBuilder log;
 
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try 
            Process process = Runtime.getRuntime().exec("logcat -d");
            BufferedReader bufferedReader = new BufferedReader(
            new InputStreamReader(process.getInputStream()));
 
            log=new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) 
                log.append(line);
            
            TextView tv = (TextView)findViewById(R.id.textView1);
            tv.setText(log.toString());
         catch (IOException e) 
               
 
        //convert log to string
        final String logString = new String(log.toString());
 
        //create text file in SDCard
        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File (sdCard.getAbsolutePath() + "/myLogcat");
        dir.mkdirs();
        File file = new File(dir, "logcat.txt");

        try   
            //to write logcat in text file
            FileOutputStream fOut = new FileOutputStream(file);
            OutputStreamWriter osw = new OutputStreamWriter(fOut); 

            // Write the string to the file
            osw.write(logString);            
            osw.flush();
            osw.close();
         catch (FileNotFoundException e) 
            e.printStackTrace();
         catch (IOException e) 
            e.printStackTrace();
        
    

【讨论】:

【参考方案2】:

所以有更短的变体

try 
    final File path = new File(
            Environment.getExternalStorageDirectory(), "DBO_logs5");
    if (!path.exists()) 
        path.mkdir();
    
    Runtime.getRuntime().exec(
            "logcat  -d -f " + path + File.separator
                    + "dbo_logcat"
                    + ".txt");
 catch (IOException e) 
    e.printStackTrace();

【讨论】:

执行 logcat 安全吗?我的意思是,你能指望它保证可用吗?您的应用是否需要某些权限?

以上是关于扩展 Android.util.Log 以写入文件的主要内容,如果未能解决你的问题,请参考以下文章

如何监控 android.util.log 或覆盖它?

如何查看log日志文件

求教怎么在android的Logcat中输出日志

手机文件管理中的log是啥意思

手机中app.log是啥

我的Android进阶之旅------>Android关于Log的一个简单封装