Tag log что это на андроид

Log | Android Developers

Tag log что это на андроид

public final class Log
extends Object

java.lang.Object
   ↳ android.util.Log

API for sending log output.

Generally, you should use the Log.v(), Log.d(), Log.i(), Log.w(), and Log.e() methods to write logs. You can then view the logs in logcat.

The order in terms of verbosity, from least to most is ERROR, WARN, INFO, DEBUG, VERBOSE. Verbose should never be compiled into an application except during development. Debug logs are compiled in but stripped at runtime. Error, warning and info logs are always kept.

Tip: A good convention is to declare a TAG constant in your class: private static final String TAG = «MyActivity»; and use that in subsequent calls to the log methods.

Tip: Don't forget that when you make a call Log.v(TAG, «index=» + i); that when you're building the string to pass into Log.

d, the compiler uses a StringBuilder and at least three allocations occur: the StringBuilder itself, the buffer, and the String object. Realistically, there is also another buffer allocation and copy, and even more pressure on the gc.

That means that if your log message is filtered out, you might be doing significant work and incurring significant overhead.

Summary

int ASSERT Priority constant for the println method.
int DEBUG Priority constant for the println method; use Log.d.
int ERROR Priority constant for the println method; use Log.e.
int INFO Priority constant for the println method; use Log.i.
int VERBOSE Priority constant for the println method; use Log.v.
int WARN Priority constant for the println method; use Log.w.
static int d(String tag, String msg, Throwable tr) Send a DEBUG log message and log the exception.
static int d(String tag, String msg) Send a DEBUG log message.
static int e(String tag, String msg) Send an ERROR log message.
static int e(String tag, String msg, Throwable tr) Send a ERROR log message and log the exception.
static String getStackTraceString(Throwable tr) Handy function to get a loggable stack trace from a Throwable
static int i(String tag, String msg, Throwable tr) Send a INFO log message and log the exception.
static int i(String tag, String msg) Send an INFO log message.
static boolean isLoggable(String tag, int level) Checks to see whether or not a log for the specified tag is loggable at the specified level.
static int println(int priority, String tag, String msg) Low-level logging call.
static int v(String tag, String msg) Send a VERBOSE log message.
static int v(String tag, String msg, Throwable tr) Send a VERBOSE log message and log the exception.
static int w(String tag, Throwable tr) Send a WARN log message and log the exception.
static int w(String tag, String msg, Throwable tr) Send a WARN log message and log the exception.
static int w(String tag, String msg) Send a WARN log message.
static int wtf(String tag, String msg) What a Terrible Failure: Report a condition that should never happen.
static int wtf(String tag, Throwable tr) What a Terrible Failure: Report an exception that should never happen.
static int wtf(String tag, String msg, Throwable tr) What a Terrible Failure: Report an exception that should never happen.
From class java.lang.Object

Object clone() Creates and returns a copy of this object.
boolean equals(Object obj) Indicates whether some other object is «equal to» this one.
void finalize() Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
final Class getClass() Returns the runtime class of this Object.
int hashCode() Returns a hash code value for the object.
final void notify() Wakes up a single thread that is waiting on this object's monitor.
final void notifyAll() Wakes up all threads that are waiting on this object's monitor.
String toString() Returns a string representation of the object.
final void wait(long timeout, int nanos) Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.
final void wait(long timeout) Causes the current thread to wait until either another thread invokes the notify() method or the notifyAll() method for this object, or a specified amount of time has elapsed.
final void wait() Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object.

Constants

public static final int ASSERT

Priority constant for the println method.

Constant Value: 7 (0x00000007)

public static final int DEBUG

Priority constant for the println method; use Log.d.

Constant Value: 3 (0x00000003)

public static final int ERROR

Priority constant for the println method; use Log.e.

Constant Value: 6 (0x00000006)

public static final int INFO

Priority constant for the println method; use Log.i.

Constant Value: 4 (0x00000004)

public static final int VERBOSE

Priority constant for the println method; use Log.v.

Constant Value: 2 (0x00000002)

public static final int WARN

Priority constant for the println method; use Log.w.

Constant Value: 5 (0x00000005)

Public methods

public static int d (String tag, String msg, Throwable tr)

Send a DEBUG log message and log the exception.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value may be null.
tr Throwable: An exception to log This value may be null.

public static int d (String tag, String msg)

Send a DEBUG log message.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value must never be null.

public static int e (String tag, String msg)

Send an ERROR log message.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value must never be null.

public static int e (String tag, String msg, Throwable tr)

Send a ERROR log message and log the exception.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value may be null.
tr Throwable: An exception to log This value may be null.

public static String getStackTraceString (Throwable tr)

Handy function to get a loggable stack trace from a Throwable

Parameters
tr Throwable: An exception to log This value may be null.
Returns
String This value will never be null.

public static int i (String tag, String msg, Throwable tr)

Send a INFO log message and log the exception.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value may be null.
tr Throwable: An exception to log This value may be null.

public static int i (String tag, String msg)

Send an INFO log message.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value must never be null.

public static boolean isLoggable (String tag, int level)

Checks to see whether or not a log for the specified tag is loggable at the specified level. The default level of any tag is set to INFO. This means that any level above and including INFO will be logged.

Before you make any calls to a logging method you should check to see if your tag should be logged. You can change the default level by setting a system property: 'setprop log.tag. ' Where level is either VERBOSE, DEBUG, INFO, WARN, ERROR, or ASSERT. You can also create a local.

prop file that with the following in it: 'log.tag.=' and place that in /data/local.prop.

Returns
boolean Whether or not that this is allowed to be logged.

public static int println (int priority, String tag, String msg)

Low-level logging call.

Parameters
priority int: The priority/type of this log message Value is ASSERT, ERROR, WARN, INFO, DEBUG, or VERBOSE
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value must never be null.
Returns
int The number of bytes written.

public static int v (String tag, String msg)

Читайте также  Что значит очистить кэш браузера

Send a VERBOSE log message.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value must never be null.

public static int v (String tag, String msg, Throwable tr)

Send a VERBOSE log message and log the exception.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value may be null.
tr Throwable: An exception to log This value may be null.

public static int w (String tag, Throwable tr)

Send a WARN log message and log the exception.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
tr Throwable: An exception to log This value may be null.

public static int w (String tag, String msg, Throwable tr)

Send a WARN log message and log the exception.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value may be null.
tr Throwable: An exception to log This value may be null.

public static int w (String tag, String msg)

Send a WARN log message.

Parameters
tag String: Used to identify the source of a log message. It usually identifies the class or activity where the log call occurs. This value may be null.
msg String: The message you would logged. This value must never be null.

public static int wtf (String tag, String msg)

What a Terrible Failure: Report a condition that should never happen. The error will always be logged at level ASSERT with the call stack. Depending on system configuration, a report may be added to the DropBoxManager and/or the process may be terminated immediately with an error dialog.

Parameters
tag String: Used to identify the source of a log message. This value may be null.
msg String: The message you would logged. This value may be null.

public static int wtf (String tag, Throwable tr)

What a Terrible Failure: Report an exception that should never happen. Similar to wtf(java.lang.String, java.lang.String), with an exception to log.

Parameters
tag String: Used to identify the source of a log message. This value may be null.
tr Throwable: An exception to log. This value must never be null.

public static int wtf (String tag, String msg, Throwable tr)

What a Terrible Failure: Report an exception that should never happen. Similar to wtf(java.lang.String, java.lang.Throwable), with a message as well.

Parameters
tag String: Used to identify the source of a log message. This value may be null.
msg String: The message you would logged. This value may be null.
tr Throwable: An exception to log. May be null. This value may be null.

Источник: https://developer.android.com/reference/android/util/Log

Моя практика логгирования в Android

Я люблю логи, считаю их лучшим инструментом отладки, чем дебаггер и стараюсь использовать везде.

Логгирование в Андроиде меня удивило. С одной стороны, состав инструментов SDK намекает на него как главный инструмент отладки.

Да и при тестировании без них никуда: андроидское сообщение «Приложение неожиданно остановилось» обычно совершенно ни о чем не говорит, а логи позволяют воссоздать картину преступления.

С другой стороны, API для логгирования, мягко говоря, не блещет. Особенно по сравнению с такими монстрами, как log4j.

Что мне не нравится

Как известно, вызов лога выглядит примерно так:

Возникают следующие вопросы/претензии:

  1. Зачем такая искусственная сущность, как tag?
  2. Почему бы не выводить имя класса и номер строки, где тег вызвался?
  3. Почему в сигнатурах методов не предполагается никакого форматирования?

В общем, несмотря на наличие средств для логгирования, всё равно приходится писать свою обёртку

Tag

Этот самый tag вызывает массу вопросов. Что туда выводить?

Мне встречалось несколько вариантов:

  • Одна константа на все приложение
  • Имя класса, откуда вызывается лог
  • Что попало (в зависимости от логической части программы)

С первыми двумя пунктами всё более-менее понятно. Третий подход используется, например, в SDK (конкретный пример)

Какой подход выбрать? В зависимости от приложения. Если приложение небольшое и логов пишет немного, то сойдет и первый.

Если приложение побольше и флудит в логи много, то имеет смысл использовать второй или третий подход. Единственное, лучше использовать для тегов общий префикс, чтобы иметь возможность просмотреть весь лог приложения.

Просто для того, чтобы было удобно фильтровать логи в зависимости от той части, которую мы проверяем.

Форматы

Типичный вызов лога в андроиде выглядит так:

Log.d(TAG, «Detected location from = » + location.getProvider() + «, (» + location.getLatitude() + «, » + location.getLongitude() + «)»);

А теперь посмотрим на log4net:

Log.InfoFormat( «CustomReports.GetReportData: the report type [{0}] is not supported as custom report», reportInfo.ReportTypeId);

Вызов второго вида кажется намного более приятным.

Источник лога

В log4net была возможность задать в конфигурации, чтобы со строчкой лога выводился класс, метод и номер строки, откуда лог был вызван.

По-моему, это мастхэв и жить без этого нельзя. Во-первых, так можно быстро отключать в коде логи, которые сильно мозолят глаза (иначе придется лазить поиском по всему проекту). Ну а во-вторых, это и отладку может сильно ускорить.

Кроме того, иногда хочется вывести не просто класс и номер строки, откуда лог был вызван, а еще и кусок стека вызовов.

Что делаю

Пишу разные обертки. Приведу пример наиболее универсальной из них.

  • Методы v, d, i, w, e выводят логи с общим тегом.
  • В методах vt, dt, it, wt, et можно указать свой тег. При этом желательно, чтобы у всех логов был общий префикс.
  • Все методы выводят класс и строчку, где были вызваны.
  • Методы vtrace, dtrace, itrace, wtrace, etrace выводят не просто класс и строчку, а ещё и кусок стека вызовов заданной длины. Ну хочется иногда.
  • TAG_WEB и TAG_STORAGE даны просто для примера.
  • ENABLED — для возможности отключить логи в проекте
  • С помощью флага LOCATION_ENABLED можно выключить вывод источника лога. Это если вдруг разовьется паранойя насчет производительности.

@SuppressWarnings(«ALL»)public class Log { private static final String TAG = «MegaApp»; public static final String TAG_WEB = tag(«web»); public static final String TAG_STORAGE = tag(«storage»); private static boolean ENABLED = true; private static final boolean LOCATION_ENABLED = true; public static String tag(String tag) { return TAG + «-» + tag; } public static void vt(String tag, String format, Object… args) { if (ENABLED) android.util.Log.v(tag, String.format(format, args) + getLocation()); } public static void dt(String tag, String format, Object… args) { if (ENABLED) android.util.Log.d(tag, String.format(format, args) + getLocation()); } public static void it(String tag, String format, Object… args) { if (ENABLED) android.util.Log.i(tag, String.format(format, args) + getLocation()); } public static void wt(String tag, String format, Object… args) { if (ENABLED) android.util.Log.w(tag, String.format(format, args) + getLocation()); } public static void wt(String tag, String message, Throwable e) { if (ENABLED) android.util.Log.w(tag, message + getLocation(), e); } public static void wt(String tag, Throwable e) { if (ENABLED) android.util.Log.w(tag, e); } public static void et(String tag, Throwable e) { if (ENABLED) android.util.Log.e(tag, e.getMessage() + getLocation(), e); } public static void et(String tag, String format, Object… args) { if (ENABLED) android.util.Log.e(tag, String.format(format, args) + getLocation()); } public static void v(String format, Object… args) { vt(TAG, format, args); } public static void d(String format, Object… args) { dt(TAG, format, args); } public static void i(String format, Object… args) { it(TAG, format, args); } public static void w(String format, Object… args) { wt(TAG, format, args); } public static void w(String message, Throwable e) { wt(TAG, message, e); } public static void w(Throwable e) { wt(TAG, e); } public static void e(String format, Object… args) { et(TAG, format, args); } public static void e(Throwable e) { et(TAG, e); } public static void vtrace(int traceLength, String format, Object… args) { vtrace(TAG, traceLength, format, args); } public static void dtrace(int traceLength, String format, Object… args) { dtrace(TAG, traceLength, format, args); } public static void itrace(int traceLength, String format, Object… args) { itrace(TAG, traceLength, format, args); } public static void wtrace(int traceLength, String format, Object… args) { wtrace(TAG, traceLength, format, args); } public static void etrace(int traceLength, String format, Object… args) { etrace(TAG, traceLength, format, args); } public static void vtrace(String tag, int traceLength, String format, Object… args) { if (ENABLED) android.util.Log.v(tag, String.format(format, args) + getTrace(traceLength)); } public static void dtrace(String tag, int traceLength, String format, Object… args) { if (ENABLED) android.util.Log.d(tag, String.format(format, args) + getTrace(traceLength)); } public static void itrace(String tag, int traceLength, String format, Object… args) { if (ENABLED) android.util.Log.i(tag, String.format(format, args) + getTrace(traceLength)); } public static void wtrace(String tag, int traceLength, String format, Object… args) { if (ENABLED) android.util.Log.w(tag, String.format(format, args) + getTrace(traceLength)); } public static void etrace(String tag, int traceLength, String format, Object… args) { if (ENABLED) android.util.Log.e(tag, String.format(format, args) + getTrace(traceLength)); } private static String getTrace(int length) { if (!LOCATION_ENABLED) return «»; final String logClassName = Log.class.getName(); final StackTraceElement[] traces = Thread.currentThread().getStackTrace(); int foundIndex = -1; for (int i = 0; i 0) break; } } StringBuilder sb = new StringBuilder(); sb.append(«»); for (int i = foundIndex + 1; i traces.length) break; StackTraceElement trace = traces[i]; sb.append(String.format(» at %s.%s:%s», trace.getClassName(), trace.getMethodName(), trace.getLineNumber())); } sb.delete(sb.length() — 1, sb.length()); return «» + sb.toString(); } private static String getLocation() { if (!LOCATION_ENABLED) return «»; final String logClassName = Log.class.getName(); final StackTraceElement[] traces = Thread.currentThread().getStackTrace(); boolean found = false; for (int i = 0; i

Источник: http://megadarja.blogspot.com/2012/11/androidlogwrapper.html

MTKLogger на Android – функции и возможности программы

MTKLogger – это Android-приложение для сбора ошибок, работающее в фоновом режиме.

Встроено в некоторые телефоны Android, в частности, в мобильные телефоны и планшеты, которые имеют физические компоненты MediaTek (компания, которая продаёт полупроводники).

Вы можете деактивировать приложение, не будучи пользователем root, и удалить его, если вы являетесь пользователем root.

Читайте также  Intel r management engine software что это

Работа с приложением MTKLogger на Android.

Что такое mtklogger

При этом в панели уведомлений появляется сообщение «MTKLogger is running», которое возвращается после каждой перезагрузки. Избавиться от навязчивого напоминания удаётся не всем, для этого на Андроиде необходимо отключить или удалить MTKLogger.

Для стабильной работы системы приложение не требуется, и, если вы хотите, вы можете удалить или отключить его, следуя инструкциям, описанным ниже. MTKLogger – это приложение, отвечающее за мобильный, сетевой, системный журналы и журнал модема.

Обеспечивает возможность использования всех логов в одном пользовательском интерфейсе. MTKLogger с именем пакета com.mediatek.mtklogger имеет компоненты, доступные любому приложению, которое находится на устройстве. А именно, компоненты приложения com.mediatek.mtklogger.framework.

LogReceiver и com.mediatek.mtklogger.framework. Эти компоненты можно использовать для запуска и остановки журналов. Доступные журналы – журнал GPS, журнал модема, сетевой и мобильный журнал. Базовым каталогом, содержащим папки для всех 4 журналов, является /sdcard/mtklog.

Поэтому директория доступна для приложений, которым требуется разрешение READ_EXTERNAL_STORAGE.

СОВЕТ.  Журнал GPS содержит GPS-координаты пользователя, а также временную метку. Журнал модема содержит AT-команды и их параметры, которые позволяют получать исходящие и входящие вызовы пользователя и текстовые сообщения.

Сетевой журнал служит сетевым перехватчиком tcpdump. Мобильный журнал содержит лог Android, который недоступен сторонним приложениям. Чтобы запустить приложение, войдите в инженерное меню и откройте MTKLogger.

На клавиатуре телефона наберите *#*#3646633#*#* и найдите программу в списке. Откроется окно настроек утилиты. 

Mobile Log:

  • Android Log (Журнал Android) – основной журнал android; сохраняется, пока параметр Mobile Log активен.
  • Kernel Log (Журнал ядра) – журнал ядра; сохраняется, пока параметр Mobile Log активен.
  • Bluetooth Log (Журнал Bluetooth) – журнал Bluetooth сохраняется, пока активен Mobile Log.
  • Limit Current Log Size (Ограничить текущий размер журнала) – максимальный размер журнала Mobile Log для этой сессии.
  • Limit Total Log Size (Ограничить общий размер журнала) – общий размер журнала, включая текущие и сохранённые записи Mobile Log.
  • Start Automatically (Автозапуск) – автозапуск Mobile Log.

Modem Log:

  • Log Mode (Режим журнала) – режим восстановления журналов, обычно SD.
  • Limit Log Size (Предельный размер журнала) – общий размер папки Modem Log.
  • Start Automatically (Автозапуск) – автозапуск Modem Log.

Network Log:

  • Enable environment check (Включить проверку среды) – включите для проверки текущего состояния сетевого подключения. Если параметр активен, он при необходимости пропингует 2 IP для подтверждения состояния сетевого подключения.
  • Enable package limitation (Включить ограничение пакета) – ограничить размер каждого пакета Network Log.
  • Limited package size (Ограниченный размер упаковки) – ограничения для каждого сетевого пакета.
  • Limit Log Size (Предельный размер журнала) – общий размер папки Network Log.
  • Start Automatically (Автозапуск) – автозапуск Network Log.

Advance settings:

  • Enable Tag Log (Включить журнал тегов) – включите для проверки текущего состояния сетевого подключения. Если параметр активен, он при необходимости пропингует 2 IP для подтверждения состояния сетевого подключения.
  • Log storage location (Место хранения журнала) – включите, чтобы ограничить размер каждого пакета Network Log.
  • Run Command (Команда запуска) – установите размер ограничения для каждого сетевого пакета.

Чтобы очистить все предыдущие журналы, нажмите на значок корзины, выберите «Удалить все» и подтвердите действие ОК. Чтобы извлечь файлы журналов, подключите устройство к компьютеру с помощью USB-кабеля. Перейдите в /storage/mtklog/ и скопируйте файлы с устройства на ПК.

MTKLogger – это программа-функция, которая сохраняет все события и действия, выполненные пользователем, при этом занимая всё свободное место в памяти смартфона или на SD-карте. Необходимо только в том случае, если вы этого хотите. MTKLogger можно безопасно отключить и удалить.

Это не повлияет на ваше устройство. После удаления приложения может потребоваться отключить функцию регистрации в вашем телефоне, чтобы предотвратить очередное накопление событий журнале в MTKLogger. Программа по сути является кейлоггером.

Кейлоггер, иногда называемый регистратором нажатий клавиш или системным монитором, представляет собой тип технологии наблюдения, используемый для мониторинга и записи каждого нажатия клавиши, набранного на клавиатуре конкретного компьютера.

Программное обеспечение типа Keylogger также доступно для использования на смартфонах, таких как устройства Apple iPhone и Android.

Злоумышленники часто используют такие утилиты в качестве инструмента-шпиона для кражи персональной информации, учётных данных для входа и конфиденциальной корпоративной информации.

Регистраторы кейлоггеров могут также использоваться работодателями для наблюдения за компьютерной деятельностью сотрудников, родителями для контроля за использованием Интернета их детьми, пользователями для отслеживания возможной несанкционированной активности на их устройствах или правоохранительными органами для анализа инцидентов, связанных с кибератаками.

Аппаратный кейлоггер – это небольшое устройство, которое служит коннектором между клавиатурой и ПК (экраном и смартфоном). Девайс подключается через обычный разъем PS/2 или USB-адаптер, благодаря чему спрятать такое устройство для получения конфиденциальных данных несложно.

Аппаратный кейлоггер может также иметь форму модуля, который устанавливается внутри самой клавиатуры.

Когда пользователь печатает на клавиатуре, кейлоггер собирает каждое нажатие клавиши и сохраняет его как текст на своём собственном миниатюрном жёстком диске, который может иметь до нескольких гигабайт памяти.

Чтобы получить доступ к собранной информации, злоумышленнику необходимо позже вернуться и физически удалить устройство. Существуют также беспроводные клавиатурные шпионы, которые могут перехватывать и дешифровать пакеты данных, передаваемые между беспроводной клавиатурой и её приёмником.

Программа для создания кейлогинга Bottom of Form для установки не требует физического доступа к компьютеру пользователя.

Приложение может запускаться и работать скрытно, чтобы избежать ручного обнаружения или антивирусного сканирования.

Программа кейлоггера обычно состоит из двух файлов, которые устанавливаются в одном каталоге: файл библиотеки динамической компоновки (DLL), который выполняет всю запись, и исполняемый файл, который устанавливает файл DLL и запускает его в работу. Программа записывает каждое нажатие клавиши и периодически загружает информацию через Интернет. Некоторые кейлоггеры способны сохранять и другие данные, например, буфер обмена или создание снимков экрана.

Нужно ли оставлять mtk logger обычному пользователю

Вероятность того, что MTKLogger является вредоносным ПО, невелика. Поэтому особо переживать по этому поводу не стоит.

Если приложение никак не даёт о себе знать и не мешает обычной работе смартфона, отключать или удалять его не обязательно.

К сожалению, удаление программы является единственным способом избавиться от навязчивого всплывающего при перезагрузке сообщения и индикатора в шторке уведомлений «MTKLogger is running».

Как отключить приложение MTKLogger

Для отключения MTKLogger необходимо перейти в инженерное меню смартфона.

Способ 1

  1. На клавиатуре номеронабирателя введите *#*#3646633#*#* и нажмите Вызов. 
  2. Откроется окно системных настроек. Слайдом вправо перейдите в раздел «Log and Debugging» и выберите «MTKLogger».

  3. После этого появится окно настроек приложения. Здесь необходимо отключить несколько параметров, а именно: «MobileLog», «ModemLog», «NetworkLog» и «Enable Tag Log».
  4. Чтобы отключить функции, просто кликните по ним.

После этого сообщение MTKLogger больше не появится.

Способ 2

  1. Откройте панель уведомлений и нажмите на сообщение «MTKLogger is running».

  2. В нижней части открывшегося окна нажмите на маленький красный квадрат, чтобы остановить MTKL 
  3. После этого в том же окне нажмите на значок корзины, чтобы удалить данные MTKL
  4. Выберите «Очистить все», чтобы удалить данные всех журналов, затем подтвердите действие, нажав ОК.
  5. Откройте номеронабиратель и введите *#9527*#.
  6. В открывшемся меню кликните кнопку DM.
  7. Введите RD personnel password: 54321.
  8. Если значение DM равно «1», нажмите «ОК», после чего DM изменится на «0».
  9. Если цвет кнопки DM изменился с зелёного на красный, нажмите «Close» и подтвердите действие «Sure».
  10. После перезагрузки приложение будет удалено.

Удалите MTKLogger как пользователь root

Если вы уже получили права root, вы можете удалить MTKLogger, установив приложение «Root Uninstaller».

  1. Скачайте бесплатное приложение в Google Play. Программа предназначена для удаления других приложений. Её функционал также позволяет удалять предустановленные системные утилиты.
  2. Запустите «Root Uninstaller» и найдите приложение, которое вы хотите удалить. Если вы не хотите удалять MTKLogger, программу можно заморозить, чтобы она не засоряла систему.

Права root открывают довольно много новых возможностей, и реализовать их можно не только через Root Uninstaller. Например, то же самое можно сделать с помощью альтернативного, но более сложного в использовании приложения Root Explorer.

Источник: http://NastroyVse.ru/opersys/android/mtklogger-chto-eto-za-programma-na-android.html

Logcat

В Android SDK входит набор инструментов, предназначенных для отладки. Самый важный инструмент при отладке — это LogCat (очень красивое название, которое можно перевести как Логичный Кот). Он отображает сообщения логов (журнал логов), рассылаемые при помощи различных методов.

Рассмотрим на примере. Очень часто программисту нужно вывести куда-то промежуточные результаты, чтобы понять, почему программа не работает.

Особо хитрые временно размещают на экране текстовую метку и выводят туда сообщение при помощи метода textView.setText(«Здесь был Васька»). Но есть способ лучше.

В Android есть специальный класс android.util.Log для подобных случаев.

Класс android.util.Log позволяет разбивать сообщения по категориям в зависимости от важности. Для разбивки по категориям используются специальные методы, которые легко запомнить по первым буквам, указывающие на категорию:

  • Log.e() — ошибки (error)
  • Log.w() — предупреждения (warning)
  • Log.i() — информация (info)
  • Log.d() — отладка (degub)
  • Log.v() — подробности (verbose)
  • Log.wtf() — очень серьезная ошибка! (What a Terrible Failure!, работает начиная с Android 2.2)
  • Log.meow() — когда жрать дадут? (MEOW!) Недокументированный метод, используйте на свой страх и риск. Работает не на всех устройствах

В первом параметре метода используется строка, называемая тегом. Обычно принято объявлять глобальную статическую строковую переменную TAG в начале кода:

private static final String TAG = «MyApp»;

Некоторые в сложных проектах используют следующий вариант, чтобы понимать, в каком классе происходит вызов:

private static final String TAG = this.getClass().getSimpleName();

Далее уже в любом месте вашей программы вы вызываете нужный метод журналирования с этим тегом:

Log.i(TAG, «Это мое сообщение для записи в журнале»);

Также используется в исключениях:

try {// …} catch (Exception exception) { Log.e(TAG, «Получено исключение», exception);}

Пользователи не видят этот журнал. Но, вы, как разработчик, можете увидеть его через программу LogCat, доступный через ADB или DDMS.

В LogCat вы можете отфильтровать сообщение по заданному тегу, чтобы видеть на экране только свои сообщения. Для этого выберите нужный тип тега из выпадающего списка Log Level.

Читайте также  Dcts mode что это

Для отслеживания сообщений с заданным текстом введите в поле поиска нужную строку и нажмите Enter.

LogCat также можно запустить из командной строки:

adb logcat

Параметры командной строки смотрите в документации.

Быстрое отключение журналирования

Настоятельно рекомендуется удалять все вызовы LogCat в готовых приложениях.

Если проект очень большой и вызовы журналирования разбросаны по всем местам кода, то ручное удаление (или комментирование) становится утомительным занятием.

Многие разработчики используют следующую хитрость — создают обёртку вокруг вызова методов LogCat.

public static final boolean isDebug = false;public final String TAG = «MyLogger»; public void MyLogger(String statement){ if (isDebug) { Log.v(TAG, statement); }}

Теперь остаётся только присвоить нужное значение переменной isDebug перед созданием готового apk-файла для распространения.

Способ устарел. В 17-й версии Android Build Tools появился класс BuildConfig, содержащий статическое поле DEBUG. Можно проверить следующим образом:

if (BuildConfig.DEBUG) { // Режим отладки, ведём логи}

Способ для продвинутых (отсюда) — например, требуется релиз с выводом в лог, или наоборот — debug с выключенным выводом. В этом случае можно создать собственный параметр и добавить его в секцию buildType gradle-файла:

buildTypes { release { // Здесь настройки релиза buildConfigField «boolean», «USE_LOG», «false» } debug { buildConfigField «boolean», «USE_LOG», «true» } // «Релиз с логами» наследуем от обычного релиза releaseWithLog.initWith(buildTypes.release) releaseWithLog { buildConfigField «boolean», «USE_LOG», «true» }}

В этом случае конфигурация releaseWithLog будет являться релизной сборкой с ведением логов. Естественно, в коде слегка поменяется проверка:

if (BuildConfig.USE_LOG) { // Здесь используем логи}

LogCat на устройстве

Попался в сети пример для просмотра сообщений LogCat на устройстве. С примером не разбирался, оставлю здесь на память.

Разметка

Разметка для элемента списка:

Добавляем разрешение в манифест:

Код для класса:

package ru.alexanderklimov.test; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List; import android.app.AlertDialog;import android.app.ListActivity;import android.content.Context;import android.graphics.Color;import android.os.AsyncTask;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView; public class TestActivity extends ListActivity { private LogStringadapter adapter = null; private ArrayList logarray = null; private LogReaderTask logReaderTask = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); logarray = new ArrayList(); adapter = new LogStringadapter(this, R.id.txtLogString, logarray); setListAdapter(adapter); logReaderTask = new LogReaderTask(); logReaderTask.execute(); } @Override protected void onDestroy() { logReaderTask.stopTask(); super.onDestroy(); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); final AlertDialog.Builder builder = new AlertDialog.Builder( TestActivity.this); String text = ((String) ((TextView) v).getText()); builder.setMessage(text); builder.show(); } private int getLogColor(String type) { int color = Color.BLUE; if (type.equals(«D»)) { color = Color.rgb(0, 0, 200); } else if (type.equals(«W»)) { color = Color.rgb(128, 0, 0); } else if (type.equals(«E»)) { color = Color.rgb(255, 0, 0); ; } else if (type.equals(«I»)) { color = Color.rgb(0, 128, 0); ; } return color; } private class LogStringadapter extends ArrayAdapter { private List objects = null; public LogStringadapter(Context context, int textviewid, List objects) { super(context, textviewid, objects); this.objects = objects; } @Override public int getCount() { return ((null != objects) ? objects.size() : 0); } @Override public long getItemId(int position) { return position; } @Override public String getItem(int position) { return ((null != objects) ? objects.get(position) : null); } public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (null == view) { LayoutInflater vi = (LayoutInflater) TestActivity.this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = vi.inflate(R.layout.logitem, null); } String data = objects.get(position); if (null != data) { TextView textview = (TextView) view .findViewById(R.id.txtLogString); String type = data.substring(0, 1); String line = data.substring(2); textview.setText(line); textview.setTextColor(getLogColor(type)); } return view; } } private class LogReaderTask extends AsyncTask { private final String[] LOGCAT_CMD = new String[] { «logcat» }; private final int BUFFER_SIZE = 1024; private boolean isRunning = true; private Process logprocess = null; private BufferedReader reader = null; private String[] line = null; @Override protected Void doInBackground(Void… params) { try { logprocess = Runtime.getRuntime().exec(LOGCAT_CMD); } catch (IOException e) { e.printStackTrace(); isRunning = false; } try { reader = new BufferedReader(new InputStreamReader( logprocess.getInputStream()), BUFFER_SIZE); } catch (IllegalArgumentException e) { e.printStackTrace(); isRunning = false; } line = new String[1]; try { while (isRunning) { line[0] = reader.readLine(); publishProgress(line); } } catch (IOException e) { e.printStackTrace(); isRunning = false; } return null; } @Override protected void onCancelled() { super.onCancelled(); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); } @Override protected void onProgressUpdate(String… values) { super.onProgressUpdate(values); adapter.add(values[0]); } public void stopTask() { isRunning = false; logprocess.destroy(); } }}

Дополнительное чтение

Меняем цвет для сообщений в LogCat

В далёком 2011 году зарубежные пользователи предлагали заменить значок на более правильный и написали баг-репорт.

Android Logcat for Professionals Tutorial —

Реклама

Источник: http://developer.alexanderklimov.ru/android/debug/logcat.php

Урок 12. Логи и всплывающие сообщения

В этом уроке мы:

— рассмотрим логи приложения и всплывающие сообщения

Создадим проект:

Project name: P0121_LogAndMess
Build Target: Android 2.3.3
Application name: LogAndMess
Package name: ru.startandroid.develop.logandmess
Create Activity: MainActivity

Создадим в main.xml экран, знакомый нам по прошлым урокам про обработчики:

Алгоритм приложения будет тот же. По нажатию кнопок меняется текст. Обработчик  — Activity.

public class MainActivity extends Activity implements OnClickListener { TextView tvOut; Button btnOk; Button btnCancel; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // найдем View-элементы tvOut = (TextView) findViewById(R.id.tvOut); btnOk = (Button) findViewById(R.id.btnOk); btnCancel = (Button) findViewById(R.id.btnCancel); // присваиваем обработчик кнопкам btnOk.setOnClickListener(this); btnCancel.setOnClickListener(this); } @Override public void onClick(View v) { // по id определяем кнопку, вызвавшую этот обработчик switch (v.getId()) { case R.id.btnOk: // кнопка ОК tvOut.setText(«Нажата кнопка ОК»); break; case R.id.btnCancel: // кнопка Cancel tvOut.setText(«Нажата кнопка Cancel»); break; } } }

Сохраним, запустим. Убедимся, что все работает.

Логи приложения

Когда вы тестируете работу приложения, вы можете видеть логи работы. Они отображаются в окне LogCat. Чтобы отобразить окно откройте меню Window > Show View > Other … В появившемся окне выберите Android > LogCat

Должна появится вкладка LogCat

Рассмотрим эту вкладку подробней. Логи имеют разные уровни важности: ERROR, WARN, INFO, DEBUG, VERBOSE (по убыванию).

 Кнопки V D I W E (в кружках) – это фильтры и соответствуют типам логов. Опробуйте их и обратите внимание, что фильтр показывает логи не только своего уровня, но и уровней более высокой важности.

Также вы можете создавать, редактировать и удалять свои фильтры – это мы рассмотрим чуть дальше.

Давайте смотреть, как самим писать логи. Делается это совсем несложно с помощью класса Log и его методов Log.v() Log.d() Log.i() Log.w() and Log.e(). Названия методов соответствуют уровню логов, которые они запишут.

Изменим код MainActivity.java. Возьмем все каменты из кода и добавим в DEBUG-логи с помощью метода Log.d.

Метод требует на вход тэг и текст сообщения. Тэг – это что-то типа метки, чтобы легче было потом в куче системных логов найти именно наше сообщение.

Добавим описание тега (TAG) и запишем все тексты каментов в лог.

public class MainActivity extends Activity implements OnClickListener { TextView tvOut; Button btnOk; Button btnCancel; private static final String TAG = «myLogs»; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // найдем View-элементы Log.d(TAG, «найдем View-элементы»); tvOut = (TextView) findViewById(R.id.tvOut); btnOk = (Button) findViewById(R.id.btnOk); btnCancel = (Button) findViewById(R.id.btnCancel); // присваиваем обработчик кнопкам Log.d(TAG, «присваиваем обработчик кнопкам»); btnOk.setOnClickListener(this); btnCancel.setOnClickListener(this); } @Override public void onClick(View v) { // по id определяем кнопку, вызвавшую этот обработчик Log.d(TAG, «по id определяем кнопку, вызвавшую этот обработчик»); switch (v.getId()) { case R.id.btnOk: // кнопка ОК Log.d(TAG, «кнопка ОК»); tvOut.setText(«Нажата кнопка ОК»); break; case R.id.btnCancel: // кнопка Cancel Log.d(TAG, «кнопка Cancel»); tvOut.setText(«Нажата кнопка Cancel»); break; } } }

Eclipse ругнется, что не знает класс Log. Обновите импорт (CTRL+SHIFT+O) и, если спросит, выберите android.util.Log. Запустим приложение, понажимаем кнопки и посмотрим логи

Видно, что все отлично записалось. Чтобы сделать просмотр удобней, создадим свой фильтр. Жмем значок +

Имя фильтра произвольное, например, «My logs».

  Log Tag – это как раз значение константы TAG, которая описана в нашем коде и использовалась в методе Log.d, т.е. — «myLogs«.

Pid оставляем пустым, это id процесса. Уровень поставим Debug

и жмем OK. Появилась новая вкладка My logs, на которой отображаются логи, соответствующие только что созданному фильтру.

Мы помещали в лог текст, но разумеется, вы можете писать, например, значения интересующих вас переменных (приведенные к типу String).

Иногда бывает, что логи не отображаются во вкладке LogCat, хотя AVD запущен, приложение работает без проблем. В таком случае должно помочь следующее: в Eclipse идем в меню Window > Open Perspective > Other > DDMS.

Откроется немного другой набор окон чем обычно. Там найдите вкладку Devices и в ней должно быть видно ваше AVD-устройство, кликните на него и логи должны появиться.

Чтобы вернуться в разработку: Window > Open Perspective > Java.

Всплывающие сообщения

Приложение может показывать всплывающие сообщения с помощью класса Toast. Давайте подредактируем метод onClick. Сделаем так, чтобы всплывало сообщение о том, какая кнопка была нажата.

public void onClick(View v) { // по id определяем кнопку, вызвавшую этот обработчик Log.d(TAG, «по id определяем кнопку, вызвавшую этот обработчик»); switch (v.getId()) { case R.id.btnOk: // кнопка ОК Log.d(TAG, «кнопка ОК»); tvOut.setText(«Нажата кнопка ОК»); Toast.makeText(this, «Нажата кнопка ОК», Toast.LENGTH_LONG).show(); break; case R.id.btnCancel: // кнопка Cancel Log.d(TAG, «кнопка Cancel»); tvOut.setText(«Нажата кнопка Cancel»); Toast.makeText(this, «Нажата кнопка Cancel», Toast.LENGTH_LONG).show(); break; } }

Разберем синтаксис вызова. Статический метод makeText создает View-элемент Toast. Параметры метода:

context – пока не будем вдаваться в подробности, что это такое и используем текущую Activity, т.е. this.
text – текст, который надо показать
duration – продолжительность показа (Toast.LENGTH_LONG — длинная, Toast.LENGTH_SHORT — короткая)

Toast создан и чтобы он отобразился на экране, вызывается метод show(). Сохраняем, запускаем, проверяем.

Если у вас есть Андроид-смартфон, я думаю вы уже видели подобные сообщения. Теперь вы знаете, как это делается )

На следующем уроке:

— создаем пункты меню

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование 

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме 

Источник: https://startandroid.ru/ru/uroki/vse-uroki-spiskom/19-urok-12-logi-i-vsplyvajuschie-soobschenija.html

Понравилась статья? Поделить с друзьями: