Решение проблемы: System.out.println не работает в Android
Быстрый ответ
В Android способом отправки сообщений в журнал отладки не является System.out.println
. Вместо этого следует использовать методы класса Log
, например:
Log.d("YourTag", "Сообщение для отладки"); // Кто выпустил Отладочку на свободу?
Тег YourTag
позволяет систематизировать логи, он может быть заменен на что-то более конкретное. Также доступны Log.e()
, Log.i()
, Log.v()
и Log.w()
, распознаваемые как сообщения о ошибках, информационные сообщения, подробные логи и предупреждения соответственно.
Вместо System.out.println
В стандартных приложениях на Java System.out.println()
используется для вывода текста в консоль. Однако в Android приложениях предпочтительным является использование инструмента Logcat для логирования.
Как правильно логировать
- Запись ошибок:
Log.e("Tag", "Сообщение об ошибке");
- Запись предупреждений:
Log.w("Tag", "Сообщение с предупреждением");
Запись информационных сообщений:
Log.i("Tag", "Информационное сообщение");
Важно: предпочтительно использовать лог-теги единообразно в виде
static final String
– это поможет организовать логи.
Про инструменты просмотра
Как в Eclipse IDE, так и в Android Studio существует просмотрщик Logcat, позволяющий просматривать и фильтровать записи. В командной строке для этого можно воспользоваться командой adb logcat
.
Визуализация
Пример использования System.out.println
в Android:
System.out.println("Привет, мир!"); // Очевидное решение в Java
Представьте себе разницу:
Консольное приложение Java Приложение Android
(Чашка) (Лееее, не чашка?)
🥛 <-- Магия 🥛 <-- Требуется больше магии
💧💧💧 🕳🕳🕳
Суть такова:
Использовать System.out.println
в Android приложении — все равно что пытаться наполнить решето водой. В консольном Java приложении это работает (Превосходно!), но в Android – нет (Да, это шутка!).
Как стоит сделать:
Log.d("MyApp", "Привет, мир!"); // "Привет, мир!" в Android через отладочный журнал
Приложение Android (Да, это чашка для Logcat!)
📱 <-- Вот куда идут отладочные сообщения
💧💧💧
Особые случаи и "устаревшие" решения
Если ваш код или экстернальные библиотеки заточены под System.out.println
, не стоит волноваться. Можно использовать механизм отражения и перенаправить System.out
на Log
в Android.
Зеленый путь: ефективное логирование
Логи для отладки не предназначены для версий приложения, предназначенных для релиза. Они полезны при разработке, но могут негативно отразиться на производительности финальной версии приложения.
Просеивая логи: идентификация и фильтрация
Используйте уникальные теги для идентификации логов, это облегчит навигацию по ним в Logcat. Это как использование дуршлага при дебаггинге.
Полезные материалы
- Log | Android Developers — официальная документация по классу
Log
. - Why doesn't "System.out.println" work in Android? – Stack Overflow — обсуждение на форуме Stack Overflow, где разъясняются особенности использования
System.out.println
в Android. - Android logging – Tutorial — детальный туториал по логированию в Android с использованием Logcat, предоставленный Vogella.
- Tutorial | DigitalOcean — практическое руководство по сравнению системы логирования Android
Log
сSystem.out.println
. - Logger | Android Developers — документация по
java.util.logging.Logger
от разработчиков Android.