Android studio logcat无需显示

use*_*173 285 logcat android-studio

我昨天安装了Android Studio,我尝试使用LogCat查看日志.但是在logcat中没有任何东西可以显示.我使用终端运行./adb logcat它的工作原理.

是否有人可以向我解释如何在Android Studio中使用logcat?

Ami*_*.io 399

重启logcat总能帮助我.

在此输入图像描述

  • 很好,很简单.这样做后立即开始工作.我看不到重启按钮.如果您的屏幕很小,有时会隐藏它.有两个箭头,如">>",然后您可以看到重启按钮,如上图所示. (12认同)
  • 非常感谢!无法相信我这些年来一直没有重新启动Android Studio:D (8认同)
  • 我想在重新启动logcat之后你需要再次运行你的应用程序 (4认同)
  • Logcat中的过滤在较新版本的Android Studio中不起作用.但在Android设备监视器中它仍然有效,所以我使用它. (2认同)
  • 当我启用了过滤器而忘了它时,这件事就发生了:( (2认同)

Rob*_*arl 132

我经常进入这种状态.Logcat是空白的.调试工作,我可以打破断点.没有设置过滤器.日志级别为详细信息.我通过反复循环以下来修复它:

  • 重启logcat(参见上面Zatziky的回答)
  • 将日志级别更改为Debug(或其他任何内容)并返回到Verbose.
  • 拔出并插回设备
  • 赛跑 adb kill-server && adb start-server
  • 关闭Android Studio并ddms在命令行上启动.
  • 重启Android Studio

如果所有其他方法都失败,最后重新启动计算机.

问题是间歇性的,我认为Android Studio只是马车.

  • 男人我觉得愚蠢..什么都没有用,没什么..直到我清除了Logcat窗口中的搜索框..我一直在找东西. (7认同)
  • 我做了这么多次,它仍然坏了,我不明白为什么.命令行工作正常,但似乎与Android Studio断开连接.我希望这个问题得到解决,我只是要重新安装我的SDK和Android Studio,看看会发生什么,因为我不能像这样快速工作. (3认同)
  • 听到这个消息我很抱歉...你在运行什么版本的Android Studio?如果你找到解决问题的方法,你能发帖吗? (2认同)
  • Android Studio 0.8.14.重新安装它什么都没做,现在尝试SDK和配置文件. (2认同)
  • 我正在使用Android Studio 1.0.2,但它仍然没有修复.编辑:请参阅@zatziky回复."重置"按钮修复了它 (2认同)

Sur*_*r D 72

我有同样的问题,但我通过以下步骤解决,尝试一次.

1)在android工作室.

2)打开android Monitor窗口(android studio底部)

3)你可以看到右下角的下拉(微调)

4)选择 - 仅显示所选应用程序.

在此输入图像描述


noo*_*oob 59

您需要按Alt+ 6两次才能重新启动logcat窗口.这样它就会显示日志输出.

问题主要发生在调试模式下.

  • 这对我来说非常适合,它是迄今为止最快的解决方案! (2认同)
  • 它只是关闭并再次打开 Logcat 选项卡 (2认同)

dev*_*grg 36

这些帮助了我:

1.启用ADB集成 在此输入图像描述 2.转到Android设备监视器检查您的设备是否在线并创建所需的过滤器 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

  • 只是启用**ADB集成**解决了这个问题 (2认同)

Ros*_*han 33

修复一些不必要的更改的最佳方法是使缓存无效

转到FILE - >单击"INVALIDATE CACHES/RESTART",弹出一个对话框,选择"INVALIDATE CACHES/RESTART"按钮.

Android studio将自动重启并重建索引.


Ash*_*gam 16

在android Studio应用程序中,您需要单击调试应用程序选项(Shift + f9)以在调试模式下运行并启用LogCat.


Man*_*ola 13

重启Android Studio对我有所帮助.

  • 无论出现什么问题,重新启动总是有帮助的。 (4认同)

whi*_*wks 12

不是技术问题,但您可能需要查看logcat的搜索框.如果输入了任何字符,则您的logcat将为空,因为它将搜索该特定字符或单词,然后如果它不存在,则您的logcat日志将完全为空.

  • 很棒找!! (2认同)

Saj*_*Zeb 10

在终端中运行此命令。它将再次开始工作。

adb kill-server && adb start-server
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 8

**

  • 如果您仍然坚持使用logcat为空,请阅读此内容

**

在麻烦和麻烦之后,我刚刚解决了这个问题.
没有任何帮助,设备监视器在调试期间工作正常但标准logcat视图始终为空.

原因很简单:
logcat视图在那里,但它已被更新移动到0宽度!

您在"ALT 6"选项卡中,您会看到两个选项卡"ADB logs"和"Devices | logcat"
设备| logcat实际上意味着它由Devices AND logcat组成,由垂直边框分割.
可以移动垂直边框,在更新期间,它似乎已向右移动100%.

这会导致收集logcat但不显示,将鼠标指针移动到工具窗口的右侧,然后只将DRAG logcat返回到视图中.

这个解决方案对每个人都没有帮助,但是我发现很多人都在使用ADB连接并且仍然没有logcat输出,这些可能会遇到同样的问题.


faz*_*zil 8


尝试关闭项目并重新打开它.它对我有用.日志将重新出现.


Mar*_* Lu 8

对我来说,问题是我有两个同名的模拟器(我创建它,删除它,然后再次使用相同的名称创建它).logcat下拉列表中有两个模拟器条目,它连接到错误的条目.我所要做的就是切换到另一个.我通过重命名模拟器永久地防止了这个问题.

在此输入图像描述


szi*_*qui 7

即使在最新版本的 Android Studio 上仍然遇到这个问题,这很奇怪。我通读了一长串解决方案,但它们对我不起作用。接受的答案适用于早期版本的 Android Studio(我猜它是 v2.3)

我做了以下让 Logcat 再次工作:

  1. Logcat > 仅显示选定的应用程序 > 无过滤器

在此处输入图片说明

  1. Logcat > 无过滤器 > 仅显示选定的应用程序

在此处输入图片说明

我希望重置 logcat 理想情况下应该给我同样的效果,但事实并非如此。手动切换过滤器是唯一有效的方法。

这是在Android Studio 3.0.1(稳定版)上(在完成当前项目之前我无法更新它) 问题发生在我早上启动Android Studio以继续我晚上离开的工作时。我希望开发人员能调查一下。从 stackoverflow 尝试了超过 15 种解决方案,但仍然没有看到任何结果,这是很辛苦的。为这个问题的未来受害者透露另一种解决方案甚至令人恼火。


Gun*_*han 6

就我而言,在开发人员选项菜单中有一个名为的选项

Revoke USB debugging authorisations.

一旦撤销所有现有授权,它将再次要求信任您正在使用的计算机,之后它再次开始显示日志.


Pam*_*lah 6

在此输入图像描述

在我的情况下,我从右边的小下拉列表中删除了"图像".之后它就显得很好了.那是因为它将在日志中搜索该搜索框中的关键字,因此如果找不到任何匹配项,则返回空白


Ras*_*ove 6

当其他一切都不起作用时,这就是我所做的。由于adb logcat效果很好,我决定依赖它。运行adb logcat -v color在Android Studio的嵌入式终端产生的输出类似于正常logcat的,并允许代码链接到工作太:

在嵌入式控制台中运行 adb logcat -v color

但这带来了一些问题:

  • 您不能指定要观看的包。使用该--pid=<your PID>选项,您可以查看单个进程的输出。但是由于每次重新启动应用程序时 PID 都会发生变化,因此每次重新启动时都要重新运行此命令。
  • 颜色很烦人(在我看来)。
  • 输出字段与之前的消息不一致,整个内容的格式不正确,这使得跟踪 logcat 比它应该的要困难得多(尽管嵌入式 logcat 也是如此)。

所以我决定制作我自己的工具来自动监视我的包 PID(s) 并美化 logcat 输出:

import java.awt.AWTException;
import java.io.*;
import java.util.ArrayList;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Logcat {

    private static final String ADB_FILE_PATH = "adb";

    // Customizations,
    private static final Color     V_COLOR = Color.RESET;
    private static final Color     D_COLOR = Color.RESET;
    private static final Color     I_COLOR = Color.RESET;
    private static final Color     W_COLOR = Color.BLUE;
    private static final Color     E_COLOR = Color.RED_BRIGHT;
    private static final Color  HINT_COLOR = Color.MAGENTA_BOLD_BRIGHT;
    private static final Color OTHER_COLOR = Color.GREEN_BOLD_BRIGHT;

    private static final int       DATE_LENGTH =   5;
    private static final int       TIME_LENGTH =  12;
    private static final int PROCESS_ID_LENGTH =   5;
    private static final int  THREAD_ID_LENGTH =   5;
    private static final int  LOG_LEVEL_LENGTH =   1;
    private static final int        TAG_LENGTH =  20;
    private static final int    MESSAGE_LENGTH = 110;

    private static final String SEPARATOR = " | ";
    private static final String CONTINUATION = "?";
    private static final String INDENTATION = "  ";

    private static final int PROCESS_IDS_UPDATE_INTERVAL_MILLIS = 1224;

    private static final int HISTORY_LENGTH = 1000;

    // State,
    private static boolean skipProcessIDCheck;
    private static ArrayList<String> processIDs = new ArrayList<String>();

    private static String logLevelToShow="V";  // All.

    private static Process logcatProcess;
    private static boolean appClosed;
    private static boolean stopEverything;

    private static String[] history = new String[HISTORY_LENGTH];
    private static int currentLocationInHistory, historyLength;

    public static void main(final String args[]) {

        clearAndroidStudioConsole();
        System.out.println("besm Allah");

        // Get processes ids of the provided package,
        if (args.length==0) {
            skipProcessIDCheck = true;
        } else {
            skipProcessIDCheck = false;
            getProcessIDs    (args[0]);    // Do it once before we start.
            monitorProcessIDs(args[0]);    // Do it periodically from now on.
        }

        // Start capturing and prettifying logcat,
        if (!monitorLogcat()) {
            stopEverything = true;
            return;
        }

        // Handle user input,
        handleUserInput();
    }

    private static void watch(final Process process, final ProcessListener listener) {

        // Read process standard output and send it to the listener line by line,
        new Thread() {
            public void run() {
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line = "";
                try {
                    do {
                        if (bufferedReader.ready()) {
                            line = bufferedReader.readLine();
                            if (line!=null && !line.isEmpty()) listener.onNewLine(line);
                        } else {
                            Thread.sleep(100);
                        }
                    } while (line!=null && !stopEverything);
                } catch (Exception e) { e.printStackTrace(); }
            }
        }.start();
    }

    private static void monitorProcessIDs(String packageName) {

        // Continuously monitor the process IDs of this package and update when changed,
        new Thread() {
            public void run() {
                do {
                    try { Thread.sleep(PROCESS_IDS_UPDATE_INTERVAL_MILLIS); } catch (InterruptedException e) {}
                    getProcessIDs(packageName);
                } while (!stopEverything);
            }
        }.start();
    }

    private static void getProcessIDs(String packageName) {

        // Get the process IDs associated with this package once,
        ArrayList<String> newProcessIDs = new ArrayList<String>();
        Runtime runtime = Runtime.getRuntime();
        try {
            Process getPIDProcess = runtime.exec(ADB_FILE_PATH + " shell ps");
            watch(getPIDProcess, (line) -> {
                if (line.contains(packageName)) {
                    newProcessIDs.add(removeRedundantSpaces(line).split(" ")[1]);
                }
            });
            getPIDProcess.waitFor();
            Thread.sleep(500);  // Make sure we've already handled all the input from the process.
        } catch (Exception e) { e.printStackTrace(); }

        // Return immediately if program is closed,
        if (stopEverything) return ;

        // Some action upon getting the pid(s),
        boolean shouldRepeatHistory = false;
        if (newProcessIDs.isEmpty()) {

            // Just closed,
            if (!appClosed) {
                appClosed = true;
                prettify("----- App closed -----");
            }
        } else if (appClosed) {

            // Just opened, clear,
            appClosed = false;
            clearAndroidStudioConsole();
            prettify("----- App opened -----");
            shouldRepeatHistory = true;
        } else {

            // Detect changes in processes,
            for (String pid : newProcessIDs) {
                if (!processIDs.contains(pid)) {
                    clearAndroidStudioConsole();
                    prettify("----- Process(es) changed (or app restarted - some logs could have been missed) -----");
                    shouldRepeatHistory = true;
                    break ;
                }
            }
        }

        // Set the new PID(s),
        processIDs = newProcessIDs;
        if (shouldRepeatHistory) repeatHistory();
    }

    private static boolean monitorLogcat() {

        Runtime runtime = Runtime.getRuntime();
        try {
            logcatProcess = runtime.exec(ADB_FILE_PATH + " logcat -v threadtime");
            watch(logcatProcess, (line) -> {

                // Learn history, in case we need to repeat it,
                if (appClosed || processLogcatLine(line)) {
                    history[currentLocationInHistory] = line;
                    currentLocationInHistory = (currentLocationInHistory + 1) % history.length;
                    if (historyLength<history.length) historyLength++;
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

    private static boolean processLogcatLine(String line) {
        try {
            return prettify(line);
        } catch (Exception e) {
            print(line, OTHER_COLOR);
            System.out.println();

            // Debug,
            e.printStackTrace();
            return true;
        }
    }

    // Returns true if line should be kept in history,
    private static synchronized boolean prettify(String line) {

        if (line.startsWith("-")) {
            // It's a "beginning of <something>" line,
            print(line, HINT_COLOR);
            System.out.println();
            return true;
        }

        // Get the individual fields,
        String      date = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();
        String      time = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();
        String processID = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();

        // Break early if possible,
        if (!skipProcessIDCheck && !processIDs.contains(processID.trim())) return false;

        // Continue parsing,
        String  threadID = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();
        String  logLevel = line.substring(0, line.indexOf(' ')); line = line.substring(line.indexOf(' ')+1); line = line.trim();

        // Break early if possible,
        switch (logLevel) {
            case "V": if (!"V"    .contains(logLevelToShow)) return true; break;
            case "D": if (!"VD"   .contains(logLevelToShow)) return true; break;
            case "I": if (!"VDI"  .contains(logLevelToShow)) return true; break;
            case "W": if (!"VDIW" .contains(logLevelToShow)) return true; break;
            case "E": if (!"VDIWE".contains(logLevelToShow)) return true; break;
        }

        // Continue parsing,
        String       tag = line.substring(0, line.indexOf(':')); line = line.substring(line.indexOf(':')+1); line = line.trim();

        // Because some tags have a trailing ":",
        if (line.startsWith(":")) {
            tag += ":";
            line = line.substring(1);
        }

        // Indent lines starting by "at",
        String indentation = "";
        if (line.startsWith("at ")) {
            indentation = "   " + INDENTATION;
            line = " " + INDENTATION + line;
        }

        // Print the prettified log,
        Color color;
        switch (logLevel) {
            case "V": color = V_COLOR; break;
            case "D": color = D_COLOR; break;
            case "I": color = I_COLOR; break;
            case "W": color = W_COLOR; break;
            case "E": color = E_COLOR; break;
            default:
                color = Color.RESET;
        }

        String fields = adjustLength(     date,       DATE_LENGTH) + SEPARATOR +
                        adjustLength(     time,       TIME_LENGTH) + SEPARATOR +
                        adjustLength(processID, PROCESS_ID_LENGTH) + SEPARATOR +
                        adjustLength( threadID,  THREAD_ID_LENGTH) + SEPARATOR +
                        adjustLength( logLevel,  LOG_LEVEL_LENGTH) + SEPARATOR +
                        adjustLength(      tag,        TAG_LENGTH) + SEPARATOR;

        // Split the message onto multiple lines if needed,
        String message = chunkPreservingParentheses(line, MESSAGE_LENGTH, 2);
        print(fields + message, color);
        System.out.println();

        while (line.length() > message.length()) {

            // Debug,
            //print(line, OTHER_COLOR);
            //System.out.println("Line: " + line.length() + "length: " + message.length() + ", cont: " + CONTINUATION.length() + "dent: " + indentation.length());
            //System.out.println();

            // Remove the already printed part.
            line = line.substring(message.length()-CONTINUATION.length());

            // Add a dot to make links work,
            boolean shouldAddDot=false;
            if (line.matches("^[^\\.]*\\(.*:[123456789][1234567890]*\\).*")) shouldAddDot = true;

            // Indent,
            line = (shouldAddDot ? "." : (indentation.isEmpty() ? "" : " ")) + indentation + line;

            // Take another chunk,
            message = chunkPreservingParentheses(line, MESSAGE_LENGTH, 2+indentation.length());

            // Front pad to align this part with the message body,
            String paddedMessage = message;
            for (int i=0; i<fields.length(); i++) paddedMessage = ' ' + paddedMessage;

            // Print,
            print(paddedMessage, color);
            System.out.println();
        }

        return true;  // Keep in local buffer.
    }

    private static String adjustLength(String text, int length) {
        while (text.length() < length) text += ' ';
        if (text.length() > length) {
            text = text.substring(0, length-CONTINUATION.length());
            text += CONTINUATION;
        }
        return text;
    }

    private static String chunkPreservingParentheses(String text, int length, int minChunckLength) {

        if (text.length() <= length) return text;

        // Take a chunk out of the text,
        String chunk = text.substring(0, length-CONTINUATION.length()) + CONTINUATION;

        // Check if a paranthesis was opened and not closed,
        int lastOpenParanthesisIndex = chunk.lastIndexOf('(');
        int lastCloseParanthesisIndex = chunk.lastIndexOf(')');
        if (lastCloseParanthesisIndex <= lastOpenParanthesisIndex) {  // Also works when either is not found.
            if (minChunckLength<1) minChunckLength = 1;
            if (lastOpenParanthesisIndex > minChunckLength+CONTINUATION.length()) { // Avoid endless loops.
                int includeParenthesisSize = (CONTINUATION.length()>0) ? 1 : 0;
                chunk = text.substring(0, lastOpenParanthesisIndex+includeParenthesisSize-CONTINUATION.length()) + CONTINUATION;
            }
        }

        return chunk;
    }

    private static void repeatHistory() {
        int index = currentLocationInHistory-historyLength;
        if (index < 0) index += history.length;
        for (int i=0; i<historyLength; i++) {
            processLogcatLine(history[index]);
            index = (index + 1) % history.length;
        }
    }

    private static void print(String text, Color color) {
        System.out.print(color);
        System.out.print(text);
        System.out.print(Color.RESET);
    }

    private static String removeRedundantSpaces(String text) {
        String newText = text.replace("  ", " ");
        while (!text.equals(newText)) {
            text = newText;
            newText = text.replace("  ", " ");
        }
        return text;
    }

    private static void clearAndroidStudioConsole() {

        // Couldn't find a reliable way to clear Intellij terminal scrollback, so we just print
        // a LOT of newlines,
        StringBuilder bunchOfNewLines = new StringBuilder();
        for (int i=0; i<124; i++) bunchOfNewLines.append(System.lineSeparator());
        System.out.print(bunchOfNewLines);

        // Scroll the current line to the top of the window,
        try {
            // If we are on Windows,
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        } catch (Exception e) {

            // We are not on Windows,
            bunchOfNewLines = new StringBuilder();
            for (int i=0; i<124; i++) bunchOfNewLines.append("\b\r");
            System.out.print(bunchOfNewLines);
        }
    }

    private static void handleUserInput() {

        // Line read. Unfortunately, java doesn't provide character by character reading out of the box.
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String input = "";
        do {
            try {
                if (bufferedReader.ready()) {
                    input = input = bufferedReader.readLine().toUpperCase();

                    // Set log level,
                    if (input.equals("V")||input.equals("D")||input.equals("I")||input.equals("W")||input.equals("E")) {

                        if (!logLevelToShow.equals(input)) {
                            logLevelToShow = input;
                            clearAndroidStudioConsole();
                            repeatHistory();
                        }

                        prettify("----- Log level set to " + logLevelToShow + " -----");

                    } else if (input.equals("C")) {

                        // Clear screen and history,
                        clearAndroidStudioConsole();
                        historyLength = 0;
                    }
                } else {
                    Thread.sleep(100);
                }
            } catch (Exception e) { e.printStackTrace(); }

            // Check if the logcat process is still alive,
            if (!logcatProcess.isAlive()) {
                prettify("----- adb logcat process terminated -----");
                stopEverything = true;
            }

        } while (!stopEverything && !input.equals("Q"));

        // Allow all monitoring threads to exit,
        stopEverything = true;
    }

    interface ProcessListener {
        void onNewLine(String line);
    }

    enum Color {

        // Thanks to this answer: /sf/answers/3636122941/

        //Color end string, color reset
        RESET("\033[0m"),

        // Regular Colors. Normal color, no bold, background color etc.
        BLACK  ("\033[0;30m"),
        RED    ("\033[0;31m"),
        GREEN  ("\033[0;32m"),
        YELLOW ("\033[0;33m"),
        BLUE   ("\033[0;34m"),
        MAGENTA("\033[0;35m"),
        CYAN   ("\033[0;36m"),
        WHITE  ("\033[0;37m"),

        // Bold
        BLACK_BOLD  ("\033[1;30m"),
        RED_BOLD    ("\033[1;31m"),
        GREEN_BOLD  ("\033[1;32m"),
        YELLOW_BOLD ("\033[1;33m"),
        BLUE_BOLD   ("\033[1;34m"),
        MAGENTA_BOLD("\033[1;35m"),
        CYAN_BOLD   ("\033[1;36m"),
        WHITE_BOLD  ("\033[1;37m"),

        // Underline
        BLACK_UNDERLINED  ("\033[4;30m"),
        RED_UNDERLINED    ("\033[4;31m"),
        GREEN_UNDERLINED  ("\033[4;32m"),
        YELLOW_UNDERLINED ("\033[4;33m"),
        BLUE_UNDERLINED   ("\033[4;34m"),
        MAGENTA_UNDERLINED("\033[4;35m"),
        CYAN_UNDERLINED   ("\033[4;36m"),
        WHITE_UNDERLINED  ("\033[4;37m"),

        // Background
        BLACK_BACKGROUND  ("\033[40m"),
        RED_BACKGROUND    ("\033[41m"),
        GREEN_BACKGROUND  ("\033[42m"),
        YELLOW_BACKGROUND ("\033[43m"),
        BLUE_BACKGROUND   ("\033[44m"),
        MAGENTA_BACKGROUND("\033[45m"),
        CYAN_BACKGROUND   ("\033[46m"),
        WHITE_BACKGROUND  ("\033[47m"),

        // High Intensity
        BLACK_BRIGHT  ("\033[0;90m"),
        RED_BRIGHT    ("\033[0;91m"),
        GREEN_BRIGHT  ("\033[0;92m"),
        YELLOW_BRIGHT ("\033[0;93m"),
        BLUE_BRIGHT   ("\033[0;94m"),
        MAGENTA_BRIGHT("\033[0;95m"),
        CYAN_BRIGHT   ("\033[0;96m"),
        WHITE_BRIGHT  ("\033[0;97m"),

        // Bold High Intensity
        BLACK_BOLD_BRIGHT  ("\033[1;90m"),
        RED_BOLD_BRIGHT    ("\033[1;91m"),
        GREEN_BOLD_BRIGHT  ("\033[1;92m"),
        YELLOW_BOLD_BRIGHT ("\033[1;93m"),
        BLUE_BOLD_BRIGHT   ("\033[1;94m"),
        MAGENTA_BOLD_BRIGHT("\033[1;95m"),
        CYAN_BOLD_BRIGHT   ("\033[1;96m"),
        WHITE_BOLD_BRIGHT  ("\033[1;97m"),

        // High Intensity backgrounds
        BLACK_BACKGROUND_BRIGHT  ("\033[0;100m"),
        RED_BACKGROUND_BRIGHT    ("\033[0;101m"),
        GREEN_BACKGROUND_BRIGHT  ("\033[0;102m"),
        YELLOW_BACKGROUND_BRIGHT ("\033[0;103m"),
        BLUE_BACKGROUND_BRIGHT   ("\033[0;104m"),
        MAGENTA_BACKGROUND_BRIGHT("\033[0;105m"),
        CYAN_BACKGROUND_BRIGHT   ("\033[0;106m"),
        WHITE_BACKGROUND_BRIGHT  ("\033[0;107m");

        private final String code;

        Color(String code) { this.code = code; }
        @Override public String toString() { return code; }
    }
}
Run Code Online (Sandbox Code Playgroud)

只需将此代码转储到Logcat.java并使用以下命令进行编译:

javac Logcat.java
Run Code Online (Sandbox Code Playgroud)

并在 Android Studio 的嵌入式终端内运行:

java Logcat <your.package.name>
Run Code Online (Sandbox Code Playgroud)

例如:

java Logcat com.nomone.vr_desktop
Run Code Online (Sandbox Code Playgroud)

结果如下所示:

我自己的 Logcat 美化器

它是高度可定制的,我在应用程序的第一部分中分离了大部分选项,因此您可以轻松调整颜色和格式。如果该adb工具不在您的 PATH 环境变量中,只需ADB_FILE_PATH<


San*_*ino 5

确保在模拟器开发人员菜单选项中具有Logger缓冲区大小正确的值。

在此处输入图片说明

  • 另外,如果有“选择日志级别”选项,则应启用它。不确定,但猜测它是在 Android 10 上添加的。 (2认同)

Pab*_*nso 5

在 Android 3.6.1 中,我必须:

  • 升级到最新的 Android Studio 版本 (4.xx)
  • 重启Logcat
  • 重新启动应用程序
  • 重启安卓工作室
  • 重启安卓测试设备