Android: фильтр Logcat по тегу с помощью регулярного выражения
При регистрации мои Теги всегда выглядят так:
com.myapp.SomeActivity
Для каждого оператора log я добавляю первую часть " com.мой друг."к тегу класса, который делает вызов журнала. Например:
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 с помощью операторов Log, которые записывает мое приложение, и избежать загромождения моего файла журнала журналами из система или другие приложения.
Поэтому я придумал получать журналы следующим образом:
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.мой папа.: я" не работает. Я также попытался опустить asterix (), но это тоже не работает. Однако, если я использую "*: I", это работает.
Что заставляет меня задуматься, можно ли фильтровать только по полному имени тега? Есть ли способ, которым я могу получить журнал, который фильтруется по " com.мой папа." ?
Я предполагаю, что план B будет заключаться в том, что в цикле while я мог бы проверить, содержит ли строка мой тег, и добавить его только в этом случае, но я действительно хотел бы избежать этого...
1 ответ:
Чтобы решить эту проблему, я отказался от более элегантного (и до сих пор неизвестного) решения для плана B, на который я намекал в своем первом посте. Я использую следующее регулярное выражение для фильтрации каждой строки файла журнала, который я получил с помощью команды logcat-d-v time *: I (выполняется с помощью Runtime.getRuntime ().exec (команда)):
.*([DIWE]{1}/com.myapp.).*Приведенное выше регулярное выражение соответствует логическим операторам следующим образом:
I/com.myapp.MyClass Crashed and did not recover - too bad.[DEWI] означает, что уровень журнала должен быть либо D (ebug), E (rror), W (arning) , либо I (nfo) для того, чтобы регулярное выражение, чтобы соответствовать. Если вы также хотите извлечь V (erbose) logging, просто добавьте "V".
Comments