gpt4 book ai didi

Android 日志记录 : filter from the application itself

转载 作者:行者123 更新时间:2023-11-28 20:15:05 31 4
gpt4 key购买 nike

有没有办法以编程方式配置 Android 应用程序以过滤发送到 logcat 的日志消息?我明白,logcat 可以配置为过滤掉一些东西,但我想在 Android 应用程序中做同样的事情。

用例 - 我实际上正在使用 robolectric 作为我的测试用例,我可以直接在我的主机上运行,​​而不是在模拟器上运行。这对于非 GUI 的东西实际上非常方便。我的一些代码会发出 Android 日志。我无法附加 logcat 以查看其输出。我可以将日志重定向到常规标准输出。但在这一点上我没有过滤,所以它要么是 grep 或类似的,要么是筛选数千行不相关的东西。

最佳答案

这就是我所做的:

    public class CustomPrintStream extends PrintStream {

private String regexFilter;
private Pattern pattern;

public IonPrintStream(@NonNull File file) throws FileNotFoundException {
super(file);
}

public String getRegexFilter() {
return regexFilter;
}

public void setRegexFilter(String regexFilter) {
this.regexFilter = regexFilter;
if (regexFilter != null && !regexFilter.isEmpty()) {
pattern = Pattern.compile(regexFilter);
} else {
pattern = null;
}
}

@Override
public void println(String x) {

if (x != null && pattern != null && !pattern.matcher(x).find()) {
return;
}

System.out.println(x);
}
}

在 Robolectric 上的使用(您可以在 @Before 方法上执行):

        File file = new File("log.txt");
if (!file.exists() && !file.createNewFile()) {
throw new RuntimeException("Log file could not be created");
}

CustomPrintStream printStream = new CustomPrintStream(file);
printStream.setRegexFilter("[your regex here]");
ShadowLog.stream = printStream;

在你的情况下,因为你不想显示一些日志,你可以过滤这样的东西:

        //I don't want to log CursorWindowStats and SQLiteCursor tags:
printStream.setRegexFilter("^((?!CursorWindowStats|SQLiteCursor).)*$");

关于Android 日志记录 : filter from the application itself,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27754333/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com