如何重定向logcat输出?

时间:2012-10-22 07:28:00

标签: android logcat

有没有办法将logcat的输出重定向到InputStream或类似的东西?我正在考虑如何在C中重定向stderr。 我想这样做,以便在我的应用程序启动时重定向,并将所有发生的事情转储到文件中。

5 个答案:

答案 0 :(得分:3)

如果您可以连接设备进行调试,可以从命令行

进行调试
$ adb logcat > textfile.txt

答案 1 :(得分:2)

我找到的最简单的方法是使用System.setErr。我允许您轻松地将错误输出重定向到文件。

示例:

System.setErr(new PrintStream(new File("<file_path>"))

答案 2 :(得分:1)

LogCat输出的唯一重定向可能性是文档herehere

无法在应用程序本身中重用LogCat输出。但是,您可以像export it to a file那样问。

答案 3 :(得分:0)

从您的应用中过滤logcat尝试:

        int pid = android.os.Process.myPid();
        File outputFile = new File(Environment.getExternalStorageDirectory() + "/logcat.txt");
        Log.d("zzz","outputFile: " + outputFile);
        try {
            String command = "logcat | grep " + pid + " > " + outputFile.getAbsolutePath();
            Log.d("zzz","command: " + command);
            Process p =  Runtime.getRuntime().exec("su");
            OutputStream os = p.getOutputStream();
            os.write((command + "\n").getBytes("ASCII"));
        } catch (IOException e) {

        }

答案 4 :(得分:0)

在 Kotlin 中,这就是我使用的,它似乎创建并记录到 logcat.txt 文件(位于应用程序目录中),无论应用程序是被调试还是直接从平板电脑运行。 (旁注:由于某种原因,在我停止应用程序并重新连接设备之前,该目录不会刷新或显示在文件资源管理器中。)(感谢之前贡献者的帮助)

   located in utilities...
     val publicDirectory = globalContext.getExternalFilesDir(null)
                publicDirectoryName = publicDirectory?.toString() + "/"


        fun redirectLogcatToFile() {
        try {
            val filename =
                File(Utilities.publicDirectoryName + "logcat.txt")
            filename.createNewFile()
            val cmd = "logcat -v time -f " + filename.getAbsolutePath() +" -s " + logcatTag
            Runtime.getRuntime().exec(cmd)
        } catch (ex: Exception ) {
            Utilities.toastOnAnyThread("Utilities.redirectLogcatToFile: " + ex.message)
        }
    }
    
    fun Log( message : String ){
        Log.i(logcatTag, message )
    }