Android Log.v (), Log.d (), Log.i (), Log.w (), Log.e () - Коли користуватися кожним?


330

Різні LogCatметоди:

Log.v(); // Verbose
Log.d(); // Debug
Log.i(); // Info
Log.w(); // Warning
Log.e(); // Error

Які відповідні ситуації використовувати для кожного типу лісозаготівлі? Я знаю, що, можливо, це лише трохи семантики і, можливо, це насправді не має значення, але для LogCatфільтрації в Android Studio та Eclipse було б непогано знати, що я використовую належні методи у відповідний час.

Відповіді:


725

Перейдемо у зворотному порядку:

  • Log.e : Це для тих випадків, коли трапляються погані речі. Використовуйте цей тег у таких місцях, як у заяві про вилов. Ви знаєте, що сталася помилка, і тому ви реєструєте помилку.

  • Log.w : Використовуйте це, коли ви підозрюєте, що відбувається щось тінисте . Можливо, ви не повністю перебуваєте в режимі помилок, але, можливо, ви оговталися від якоїсь несподіваної поведінки. В основному, використовуйте це для реєстрації речей, які ви не очікували, що відбудуться, але це не обов'язково помилка. Начебто "ей, це трапилося, і це дивно , ми мусимо це вивчити".

  • Log.i : використовуйте це, щоб розмістити корисну інформацію в журналі. Наприклад: що ви успішно підключились до сервера. В основному використовуйте його для повідомлення про успіхи.

  • Log.d : використовуйте це для налагодження . Якщо ви хочете роздрукувати купу повідомлень, щоб ви могли реєструвати точний потік вашої програми, скористайтеся цим. Якщо ви хочете вести журнал змінних значень, скористайтеся цим.

  • Log.v : Використовуйте це, коли ви хочете робити абсолютно горіхи під час реєстрації. Якщо ви чомусь вирішили записати кожну дрібницю у певній частині програми, скористайтеся тегом Log.v.

І як бонус ...

  • Log.wtf : Використовуйте це, коли матеріал іде абсолютно, жахливо, неправда не так. Ви знаєте ті блоки вилову, де ви вловлюєте помилки, які ніколи не повинні отримувати ... так, якщо ви хочете ввійти в них, використовуйте Log.wtf

Log.v призначений для Verboseведення журналів. Це те, що ви використовуєте, коли хочете вивести всі можливі логічні операції.
слайтон

2
Агов, приятель! Нарешті я виявляю, що займаюся роботою Android в Google. І я наткнувся на це, намагаючись зрозуміти, як реєструвати речі. :)
Містичний

11
Я не вірив, Log.wtfщо навіть пару разів перевіряв і насміхався по-справжньому вголос. На мою думку, у всіх API-інтерфейсів повинно бути щось подібне протягом
MBH

57
wtf - "Що таке жахлива невдача"
Абхішек

8
Хто назвав цей метод? Це жахлива ідея. Цікаво, як би оцінила моя команда, якби я назвав свої речі лише з 1 літерних імен. Ставка, що вони відправлять мене в пекло?
SandRock

19

Різні методи є ознаками пріоритетності. Як ви перерахували їх, вони переходять від найменшого до найважливішого. Я думаю, як ви спеціально відображаєте їх для налагодження журналів у вашому коді, залежить від компонента чи програми, над якою ви працюєте, а також від того, як Android обробляє їх у різних смаках побудови (eng, userdebug та user). Я провів неабияку роботу в рідних демонах в Android, і ось так я це роблю. Він може не застосовуватися безпосередньо до вашої програми, але може бути певна спільна позиція. Якщо моє пояснення звучить невиразно, це тому, що дещо з цього є скоріше мистецтвом, ніж наукою. Моє основне правило - бути максимально ефективним, переконайтесь, що ви можете розумно налагоджувати свій компонент, не знищуючи продуктивність системи, і завжди перевіряти наявність помилок та реєструвати їх.

V - роздруківки стану через різні проміжки часу або за будь-яких подій, які відбуваються моїм компонентом. Можливо також дуже детальні роздруківки корисних навантажень повідомлень / подій, які мій компонент отримує або надсилає.

D - подробиці незначних подій, які відбуваються в моєму компоненті, а також корисні навантаження повідомлень / подій, які мій компонент отримує або надсилає.

Я - заголовок будь-яких повідомлень / подій, які мій компонент отримує або надсилає, а також будь-яких важливих фрагментів корисного навантаження, які мають вирішальне значення для роботи мого компонента.

W - все, що трапляється, є незвичним або підозрілим, але не обов'язково помилковим.

E - Помилки, тобто речі, які не повинні відбуватися, коли вони працюють як слід.

Найбільша помилка, яку я бачу у людей, полягає в тому, що вони зловживають такими речами, як V, D і я, але ніколи не використовують W або E. Якщо помилка, за визначенням, не повинна відбуватися, або повинна траплятися дуже рідко, то це надзвичайно дешево вам записати повідомлення, коли воно трапляється. З іншого боку, якщо кожен раз, коли хтось натискає клавішу, ви робите Log.i (), ви зловживаєте спільним ресурсом реєстрації. Звичайно, використовуйте здоровий глузд і будьте обережні з журналами помилок щодо речей, що не знаходяться під вашим контролем (наприклад, мережевих помилок) або тих, що містяться в тісних петлях.

Можливо, погано

Log.i("I am here");

Добре

Log.e("I shouldn't be here");

Зважаючи на все це, чим ближче ваш код стає "готовим до виробництва", тим більше ви можете обмежувати базовий рівень реєстрації для свого коду (вам потрібно V в альфа, D у бета, I у виробництві або, можливо, навіть W у виробництві ). Вам слід запустити кілька простих випадків використання та переглянути журнали, щоб переконатися, що ви все ще можете зрозуміти, що відбувається, застосовуючи більш обмежуючу фільтрацію. Якщо ви працюєте з фільтром, наведеним нижче, ви все одно можете розповісти, що робить ваш додаток, але, можливо, не отримаєте всі деталі.

logcat -v threadtime MyApp:I *:S

6

Вихідний код містить деякі основні вказівки:

Порядок з точки зору багатослівності, щонайменше, від більшості - ПОМИЛКА, ЗАПЕРЕДЖЕННЯ, ІНФО, ДЕБУГ, ВЕРБОЗА. Дослідний текст ніколи не повинен складатися в програму, крім під час розробки. Журнали налагодження збираються, але вони знімаються під час виконання. Журнали помилок, попереджень та інформації завжди зберігаються.

Для більш детальної відповіді Куртис мертвий. Я просто додам: Не записуйте будь-яку особисту інформацію, яку можна особисто ідентифікувати, INFOабо вище ( WARN/ ERROR). В іншому випадку можуть бути забруднені звіти про помилки чи будь-що інше, що включає журнал.


5

Ви можете використовувати LOG, наприклад:

Log.e(String, String) (error)
Log.w(String, String) (warning)
Log.i(String, String) (information)
Log.d(String, String) (debug)
Log.v(String, String) (verbose)

приклад коду:

private static final String TAG = "MyActivity";
...
Log.i(TAG, "MyClass.getView() — get item number " + position);

3

Я думаю, що сенс цих різних типів журналу полягає в тому, якщо ви хочете, щоб ваш додаток в основному самостійно фільтрував власні журнали. Таким чином, Verbose може реєструвати абсолютно все, що має значення у вашій програмі, тоді рівень налагодження записуватиме підмножину журналів багатослівних записів, а потім рівень інформації записуватиме підмножину журналів налагодження. Коли ви переходите до журналів помилок, ви просто хочете записати будь-які помилки, які могли виникнути. Існує також рівень налагодження під назвою Fatal, коли щось дійсно вражає вентилятора у вашому додатку.

Взагалі ви маєте рацію, це в основному довільно, і вам належить визначити, що вважається журналом налагодження порівняно з інформаційним, проти та помилкою тощо.


3

Незважаючи на те, що на це питання вже відповіли, я відчуваю, що у відповіді, на яку відповіли, є відсутні приклади.

Тому я приведу сюди те, що написав у публікації в блозі "Android Log Logings"

Багатослівний

Є найнижчим рівнем лісозаготівлі. Якщо ви хочете піти з лісозаготівлею, тоді ви переходите до цього рівня. Я ніколи не розумів, коли використовувати Verbose та коли використовувати Debug. Різниця звучала для мене дуже довільно. Нарешті я зрозумів це, як тільки мені вказали на вихідний код Android - "Дослідник ніколи не повинен збиратися в додаток, окрім під час розробки". Тепер мені зрозуміло, щоразу, коли ви розробляєте і хочете додати видаляються журнали, які допоможуть вам під час розробки, корисно мати рівень докладної, це допоможе вам видалити всі ці журнали перед тим, як перейти до виробництва.

Налагоджувати

Для налагодження. Це найнижчий рівень, який повинен бути у виробництві. Інформація, яка тут, допоможе під час розвитку. У більшості випадків ви вимикаєте цей журнал у виробництві, щоб менше інформації надсилалося, а цей журнал увімкнено, лише якщо у вас є проблеми. Мені подобається входити в систему налагодження всієї інформації, яку додаток надсилає / отримує з сервера (подбайте про те, щоб не входити паролі !!!). Це дуже корисно, щоб зрозуміти, що помилка лежить на сервері чи додатку. Я також роблю журнали введення та виходу важливих функцій.

Інформація

Інформаційні повідомлення, що висвітлюють хід роботи програми. Наприклад, коли ініціалізація програми закінчена. Додайте інформацію, коли користувач рухається між діями та фрагментами. Реєструйте кожен виклик API, але лише мало інформації, як-от URL, статус та час відповіді.

Увага

Коли є потенційно шкідлива ситуація.

Цей журнал є, на мій досвід, складним рівнем. Коли у вас є потенційна шкідлива ситуація? Взагалі або що це нормально, або що це помилка. Я особисто мало використовую цей рівень. Приклади, коли я використовую це, як правило, коли речі трапляються кілька разів. Наприклад, користувач має помилковий пароль більше 3 разів. Це може бути тому, що він неправильно ввів пароль 3 рази, це може бути і тому, що є проблема з символом, який не приймається в нашій системі. Те саме стосується проблем з мережевим підключенням.

Помилка

Помилка подій. Додаток може продовжувати працювати після помилки. Це може бути, наприклад, коли я отримую нульовий покажчик, де я не повинен його отримувати. Під час аналізу відповіді сервера сталася помилка. Помилка сервера.

WTF (Що жахливий збій)

Фатальна для серйозних подій помилок, які призведуть до запуску програми. В Android фатальний насправді рівень помилок, різниця полягає в тому, що він також додає fullstack.


2

Нещодавно веб-сайт Android Studio (я думаю) дав поради, яких повідомлень очікувати від різних рівнів журналу, які можуть бути корисними разом з відповіддю Куртиса:

  • Багатослівний - Показати всі повідомлення журналу (за замовчуванням).
  • Налагодження - Показати повідомлення журналу налагодження, які корисні лише під час розробки, а також рівні повідомлень, нижчі у цьому списку.
  • Інформація - Показуйте очікувані повідомлення журналу для регулярного використання, а також рівні повідомлень нижче в цьому списку.
  • Попередження - Показуйте можливі проблеми, які ще не є помилками, а також рівні повідомлень нижче в цьому списку.
  • Помилка - Показуйте проблеми, які спричинили помилки, а також рівень повідомлення нижче в цьому списку.
  • Assert - Показати проблеми, які розробник очікує, що ніколи не трапляться.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.