7

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

4

5 回答 5

7

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

$ adb logcat > textfile.txt
于 2012-10-22T07:51:04.237 回答
3

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

例子:

System.setErr(new PrintStream(new File("<file_path>"))
于 2013-06-06T07:44:23.923 回答
1

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

无法在您的应用程序本身中重用 LogCat 输出。但是,您可以按照您的要求将其导出到文件中。

于 2012-10-22T07:36:36.877 回答
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) {

        }
于 2014-11-17T13:36:36.587 回答
0

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

   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 )
    }
于 2020-12-28T17:39:39.017 回答