При регистрации мои теги всегда выглядят так:
com.myapp.SomeActivity
Для каждого оператора журнала я добавляю первую часть "com.myapp." к тегу класса, который делает вызов журнала. Например:
MyActivity extends Activity{
private static final String TAG = "MyActivity";
public void someMethod(){
LogWrapper.e(TAG, "Something is wrong here.");
}
}
Мой класс LogWrapper в основном делает следующее
public class LogWrapper {
private static final String applicationTAG = "com.myapp.";
public static void e(String classTag, String message){
Log.e(applicationTAG + classTag, message);
}
}
Итак, все, что я делаю, это добавляю статический тег к тегу класса. Причина в том, что я хочу фильтровать вывод logcat с помощью операторов журнала, которые записывает мое приложение, и не загромождать мой файл журнала журналами из системы или других приложений.
Поэтому я пришел к получению журналов следующим образом:
String command = "logcat -d -v time com.myapp.*:I *:S"
Process process = Runtime.getRuntime().exec(command);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
log.append(StringUtils.NEW_LINE);
}
Однако в итоге я получил пустой файл журнала. Что заставляет меня думать, что регулярное выражение "com.myapp. :I" не работает. Я также пытался опустить звездочку (), но это тоже не работает. Однако, если я использую "*:I", это работает.
Что заставляет меня задаться вопросом, возможна ли фильтрация только по полному имени тега? Есть ли способ получить журнал, отфильтрованный по «com.myapp». ?
Я полагаю, что план Bзаключается в том, чтобы в цикле while я мог проверить, содержит ли строка мой тег, и добавить его только в том случае, если это так, но я действительно хотел бы избежать этого...