Samsung verbose debug logging что это
How do I enable/disable log levels in Android?
I am having lots of logging statements to debug for example.
while deploying this application on device phone i want to turn off the verbose logging from where i can enable/disable logging.
18 Answers 18
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.
So you may want to consider stripping the log Verbose logging statements out, possibly using ProGuard as suggested in another answer.
You can set properties temporarily using the setprop command. For example:
Alternatively, you can specify them in the file ‘/data/local.prop’ as follows:
Later versions of Android appear to require that /data/local.prop be read only. This file is read at boot time so you’ll need to restart after updating it. If /data/local.prop is world writable, it will likely be ignored.
Finally, you can set them programmatically using the System.setProperty() method.
The easiest way is probably to run your compiled JAR through ProGuard before deployment, with a config like:
That will — aside from all the other ProGuard optimisations — remove any verbose log statements directly from the bytecode.
A common way is to make an int named loglevel, and define its debug level based on loglevel.
Later, you can just change the LOGLEVEL for all debug output level.
The better way is to use SLF4J API + some of its implementation.
For Android applications you can use the following:
Stripping out the logging with proguard (see answer from @Christopher ) was easy and fast, but it caused stack traces from production to mismatch the source if there was any debug logging in the file.
Instead, here’s a technique that uses different logging levels in development vs. production, assuming that proguard is used only in production. It recognizes production by seeing if proguard has renamed a given class name (in the example, I use «com.foo.Bar»—you would replace this with a fully-qualified class name that you know will be renamed by proguard).
This technique makes use of commons logging.
Log4j or slf4j can also be used as logging frameworks in Android together with logcat. See the project android-logging-log4j or log4j support in android
It enables you to have a fine control on logs. You can for example disable all logs or just the logs of some packages or classes.
Moreover, it adds some useful functionalities (for instance you don’t have to pass a tag for each log).
I created a Utility/Wrapper which solves this problem + other common problems around Logging.
A Debugging utility with the following features:
I have tried to make the documentation self suffiecient.
Suggestions to improve this Utility are welcome.
Enable verbose logging and configure SQL Server Profiler for troubleshooting
Applies to: В Configuration Manager
In Configuration Manager, client and site server components record process information in individual log files. You can use the information in these log files to help you troubleshoot issues that might occur.
Enable verbose and debug logging on the client and management point
Verbose logging can be enabled by creating the following registry value as REG_DWORD with value 0x0:
Debug logging can be enabled by creating the following registry value as REG_SZ with a value of True:
The CCM log size can be increased to 5 MB by setting the following registry value as REG_DWORD with a value of 5242880 (decimal):
You can edit the REG_DWORD value for the following registry value to increase the number of history log files to be retained:
Restart the SMS Agent Host service to enable the changes. On the management point, you may have to restart IIS-related services for verbose logging to take effect for some logs.
Enable verbose logging for the state system component on the site server
To enable verbose logging for State System (StateSys), set the REG_DWORD value for the following registry value to 1:
This registry key change doesn’t require a restart of the SMS_Executive service or the SMS_STATE_SYSTEM thread.
Enable verbose logging for WSUS Synchronization Manager (WSYNCMGR)
To enable verbose logging for WsyncMgr.log, create or modify the following registry value on the site server and set the REG_DWORD value to 4:
Enable SQL tracing for Configuration Manager logs
To enable SQL tracing, set the REG_DWORD value for the following registry value to 1:
This registry change doesn’t require a restart of the SMS_Executive service. This registry value adds SQL trace logging for all site server logs. This should only be done temporarily while troubleshooting, and should be disabled after getting the relevant logs.
Enable verbose logging for Windows Update Agent
To enable verbose logging, create the following registry subkey with two values:
Value name | Value type | Value data |
---|---|---|
Flags | REG_DWORD | 00000007 |
Level | REG_DWORD | 00000004 |
This subkey turns on an extended tracing to the %systemroot%\Windowsupdate.log file, it also turns on an extended tracing to any attached debuggers.
Extended verbose logging can be enabled by setting the value of Flags to 17 instead of 7. However, it will significantly increase the size of WindowsUpdate.log.
Configure SQL Server Profiler to troubleshoot WSUS location request issues
In some circumstances, you may need to use SQL Server Profiler to find the call to the MP_GetWSUSServerLocation stored procedure and see what parameters are passed.
To do this, configure the SQL Server Profiler as shown in the following screenshot:
Configure SQL Server Profiler to view state message processing
To do this, configure the SQL Server Profiler as shown in the following screenshot:
How to Enable Microsoft Installer logging and Verbose logging to gather additional troubleshooting Information
Symptoms
Windows Installer uses logging to help you troubleshoot issues that may occur when you install software packages. After you enable logging, you can try the unsuccessful installation again. Windows Installer tracks the progress and records the data in a log file. These logs can then be reviewed by support professionals to help determine the issue.
Cause
Microsoft Installer issues can be caused by data corruption, corrupted installations and many other different issues.
Resolution
To troubleshoot these issues, you have to enable logging for two processes, and then try to install the updates again. When you enable logging, the actual error codes that are generated by Windows Installer are captured. As soon as the error codes are captured, you can determine the actual issue and the resolution for that issue. These errors will require you to contact Microsoft Support to resolve the issue. However, you have to do several things before you contact Microsoft Support.
To enable and collect the Windows Installer logs, follow the steps for your operating system.
Step 1: Enable Microsoft Installer logging and Windows Update verbose logging
To have us enable logging for you, go to the «Here’s an easy fix» section. If you prefer to fix this problem manually, go to the «Let me fix it myself» section.
Here’s an easy fix
To fix this problem automatically, click the Download button. In the File Download dialog box, click Run or Open, and then follow the steps in the easy fix wizard.
This wizard may be in English only. However, the automatic fix also works for other language versions of Windows.
If you’re not on the computer that has the problem, save the easy fix solution to a flash drive or a CD, and then run it on the computer that has the problem.
For Windows 8, Windows 7
For Windows Vista, Windows XP, Windows Server 2008, Windows Server 2003
For computers that are running Windows 2000, Windows XP, or Windows Server 2003
Click Start, click Run, type Notepad, and then click OK.
Type the following commands in Notepad.
On the File menu, click Save As.
In the Save in list, click Desktop.
In the File name box, type LoggingOn.reg, click All Files in the Save as type list, and then click Save.
On the desktop, double-click the LoggingOn.reg file to add the registry keys to the Windows registry.
Click OK in the message box.
For computers that are running Windows Vista and Windows Server 2008
Click Start
, and then in the Start Search box, type Notepad.
In the Programs list, click Notepad.
Type the following commands in Notepad.
On the File menu, click Save As.
In the Save in list, click Desktop.
In the File name box, type LoggingOn.reg, click All Files in the Save as type list, and then click Save.
On the desktop, double-click the LoggingOn.reg file to add the registry values to the Windows registry.
If you are prompted for an administrator password or confirmation, type the password or click Continue.
Click Yes, and then click OK.
Step 2: Try to install updates again to create the log filesTo try to install the updates again, visit the following Microsoft Update Web site:
http://update.microsoft.comNote It can take several minutes to collect these logs, and the update process may not seem to be functioning correctly. Allow for the necessary time for the process to finish.
Step 3: Disable Microsoft Installer logging and Windows Update verbose loggingImportant As soon as Windows Update or Microsoft Update has finished, disable Windows Installer logging. Having logging enabled can require too much time every time that you install updates, can slow down your computer, and can create large log files that require large amounts of disk space.
To have us disable logging for you, go to the «Here’s an easy fix» section. If you prefer to fix this problem manually, go to the «Let me fix it myself» section.
Here’s an easy fix To fix this problem automatically, click the Download button. In the File Download dialog box, click Run or Open, and then follow the steps in the easy fix wizard.
This wizard may be in English only. However, the automatic fix also works for other language versions of Windows.
If you’re not on the computer that has the problem, save the easy fix solution to a flash drive or a CD, and then run it on the computer that has the problem.
For Windows 8, Windows 7
For Windows Vista, Windows XP, Windows Server 2008, Windows Server 2003
To disable Windows Installer logging, follow the steps for your operating system.
For computers that are running Windows 2000, Windows XP, or Windows Server 2003
Click Start, click Run, type Notepad, and then click OK.
Type the following commands in Notepad.
On the File menu, click Save As.
In the Save in list, click Desktop.
In the File name box, type LoggingOff.reg, click All Files in the Save as type list, and then click Save.
On the desktop, double-click the LoggingOff.reg file to remove the registry values from the Windows registry.
Click OK in the message box.
Delete the LoggingOn.reg and LoggingOff.reg files from the desktop
Contact Microsoft Support for help, and reference this Microsoft Knowledge Base article when you speak to the support agent. For more information about how to contact Microsoft Support, visit the following Microsoft Web site:
For computers that are running Windows Vista and Windows Server 2008
Click Start
, and then type Notepad in the Start Search box.
In the Programs list, click Notepad.
Type the following commands in Notepad.
In Notepad, click Save As on the File menu.
In the Save in list, click Desktop.
In the File name box, type LoggingOff.reg, click All Files in the Save as type list, and then click Save.
On the desktop, double-click the LoggingOff.reg file to remove the registry values from the Windows registry.
If you are prompted for an administrator password or confirmation, type the password or click Continue.
Click Yes, and then click OK.
Delete the LoggingOn.reg and LoggingOff.reg files from the desktop.
Contact Microsoft Support for help, and reference this Microsoft Knowledge Base article when you speak to the support agent. For more information about how to contact Microsoft Support, visit the following Microsoft Web site:
msib3a6g.log On computers that are running Windows 2000, Windows XP, or Windows Server 2003, the installer log is located in the following directory:
C:\Documents and Settings\
Note This information assumes that Windows is installed to the default drive C. If this is not the case, adjust the drive letter for the folder path to match the installation drive.
On computers that are running Windows Vista or Windows Server 2008, the installer log is located in the following directory:
C:\Users\
Note This information assumes that Windows is installed to the default drive C. If this is not the case, adjust the drive letter for the folder path to match the installation drive.
For more information about how to enable Windows Installer logging, click the following article number to view the article in the Microsoft Knowledge Base:
314852 How to enable Windows Installer logging in Windows XP
Python: Логируем как профессионалы
Часто вижу, что помимо обработки исключений, люди мучаются кое с чем еще, а именно с логированием.
Большинство людей не знают, что писать в логи, поэтому решают логировать все, что угодно, думая, что все подряд – это в любом случае лучше, чем ничего, и, в конечном итоге, просто создают шум. А шум – это информация, которая никак не помогает вашей команде понять, в чем дело и как решить проблему.
Более того, я не думаю, что эти люди могут уверенно пользоваться уровнями логирования, поэтому используют по умолчанию logger.info везде (если не пишут print ).
Наконец, люди, похоже, не знают, как сконфигурировать логирование в Python, понятия не имеют, что такое обработчики, фильтры, методы форматирования (форматтеры) и т.д.
Цель этой статьи – разъяснить, что такое логирование и как вы должны его реализовывать. Я постараюсь привести содержательные примеры и обеспечить вас гибкими эмпирическими приемами, которые следует использовать при логировании в любом приложении, которое вы когда-либо будете создавать.
Введение
Примеры облегчают визуальное восприятие, поэтому мы будем рассматривать следующую систему:
Пользователи могут подключать несколько интеграций к ресурсам (например, GitHub, Slack, AWS и т.д.)
Ресурсы уникальны в зависимости от интеграции (например, репозитории списков с GitHub, диалоги из Slack, экземпляры списков EC2 из AWS и т.д.)
Каждая интеграция уникальна, имеет свой набор сложностей, конечных точек, шагов и т.д.
Каждая интеграция может привести к различным ошибкам, которые могут возникнуть в любое время (например, неверная аутентификация, ресурс не существует и т.д.)
Я не буду сосредотачиваться на проблемах поддержки таких интеграций, просто пронаблюдаем за тем, как это работает.
Природа логирования: хорошее логирование имеет значение
Для начала давайте проанализируем характеристики логов.
«Наглядными» мы их называем потому, что они предоставляют вам какую-то информацию, «контекстными», потому что они дают вам общее представление о том, как обстоят дела на данный момент времени. И наконец, «реактивными» они являются потому, что они позволяют вам предпринимать действия только после того, как что-то произошло (даже если ваши логи отправляются/получаются в режиме реального времени, на самом деле вы не можете изменить то, что произошло только что).
Если вы не будете учитывать природу логов, то будете производить только шум, что снизит вашу производительность.
Дальше я приведу несколько примеров, основанных на системе, которую мы определили выше:
Если вы зададите описание, к примеру «operation connect failed», но не добавите контекст, трудно будет понять, какая из интеграций не отработала, кто пострадал, на каком этапе подключения произошел сбой, поэтому и среагировать вы не можете. В конечном итоге вы будете копаться в тонне логов без малейшего представления о том, где может быть проблема.
О, а еще не стоит недооценивать способность разработчика испортить описание. Сделать это легко, просто отправив поверхностные сообщения без какого-либо контекста, например «An error happened» или «An unexpected exception was raised». Если я прочту такое, то даже не пойму, на что повлияла ошибка, потому что не буду знать, ЧТО конкретно произошло. Так что да, можно сломать даже основной смысл логов.
Логи – это конфиденциальная информация из вашего программного обеспечения, нужная чтобы вы оставались в курсе происходящего и могли реагировать на ситуации. Любые логи, которые не дают вам такой информации – это шум.
Когда нужно логировать?
Чтобы логи оставались реактивными, вам нужно логировать «события». Сделайте их такими же понятными и удобными для чтения, как эта статья. Возможно, вы не прочитали каждую строку, которую я написал выше, но вы все равно можете продолжить дальше, пропустить ненужные разделы и сосредоточиться на том, что привлекло ваше внимание. Логи должны быть такими же.
Есть эмпирическое правило построение логов:
В начале соответствующих операций или потоков (например, при подключении к сторонним сервисам и т.д.);
При любом достигнутом прогрессе (например, успешная аутентификация, получен валидный код ответа и т.д.);
При завершении операции (успешном или неудачном).
Логи должны рассказывать вам историю, у каждой истории есть начало, середина и конец.
Будьте осторожны с релевантностью, добавлять логи проще, чем удалять их, ведь все, что нерелевантно – шум.
Что логировать?
Чтобы логи были наглядными и контекстными, нужно предоставлять правильный набор информации, и я не могу сказать, какая информация будет являться таковой, не зная вашего случая. Давайте вместо этого воспользуемся нашим примером.
Рассмотрим интеграцию с AWS в качестве примера. Было бы круто иметь следующие сообщения:
Хороший пример логов
Сообщение
Понимание картины
Контекст
Началась операция с AWS
Атрибуты лога должны позволить мне выяснить, кто его вызвал
Retrieved instances from all regions
Был достигнут существенный прогресс
Connection to AWS has been successful
Операция с AWS завершилась
Атрибуты лога должны позволить мне найти сущности, на которые операция произвела положительный эффект
Пример логов об ошибках
Допустим, что извлечь экземпляры из региона af-south-1 не удалось из-за какой-то внезапной ошибки в этом регионе.
Сообщение
Понимание картины
Контекст
Началась операция с AWS
Атрибуты лога должны позволить мне выяснить, кто его вызвал
Failed to retrieve instances from regions af-south-1 when connecting to AWS for user X
Операция AWS не завершена, произошел сбой в регионе af-south-1, пострадал пользователь X
Я должен иметь возможность увидеть трассировку стека ошибки, чтобы понять, почему извлечение не удалось
В обоих случаях, я могу отследить, когда произошло какое-то событие (в логах есть отметки о времени), что именно произошло и кто от этого пострадал.
Я решил не указывать пользователя при начале и успешном завершении операции, потому что это не имеет значения (ведь это шум), поскольку:
Если я знаю, что что-то запустилось, но не знаю результата выполнения, то что я могу сделать?
Если все хорошо, то зачем беспокоиться?
Добавление таких данных делает логи шумными, потому что на них невозможно реагировать, делать-то с этим ничего не надо! Но я все еще должен быть в состоянии собрать детальную информацию из атрибутов (кто, когда, почему и т.д.). Если вы хотите что-то измерить, вам следует воспользоваться метриками, а не логами.
С другой стороны, логи об ошибках кажутся более подробными, и так и должно быть! Чтение таких логов дает достаточно уверенности, чтобы немедленно перейти к действиям:
Свяжитесь с пользователем Х и сообщите ему, что вам известно о проблеме в этом регионе.
Ключевой момент следующий: вы можете отреагировать сразу и для этого вам не требуется более глубокого изучения ситуации. Вы знаете все, что вам нужно, и можете немедленно принять меры для уменьшения ущерба. Разработчикам, возможно, потребуется углубиться в трассировку стека, чтобы собрать больше контекста (в случае с ошибкой), но общая картина уже становится ясна.
Любое сообщение об ошибке, в котором отсутствует эта минимальная информация, становится шумом, поскольку у вас появляется беспокойство, но вы все еще не можете действовать. Сначала нужно углубиться в ситуацию, чтобы понять, насколько проблема серьезна.
Если вы все еще не поняли, как писать полезные сообщения, я поделюсь с вами очень простым лайфхаком:
Всегда спрашивайте себя: Что я хочу уяснить для себя, после получения такого лога?
Предоставление контекста с помощью Python
В Python атрибуты логов можно добавить с помощью дополнительного поля, например:
Контекст не отменяет необходимости в содержательных сообщениях! Поэтому я бы так не делал:
Сообщения должны быть четкими и не оставлять места вопросам о том, что же вообще происходит. Контекст должен обогащать ваш опыт, предоставив информацию о более глубоких деталях, и давать вам понимание, по какой причине что-то произошло.
Нечто большее, чем logger.info и logger.error
Не так-то просто понять, что происходит, когда тысячи клиентов выдают логи «Connecting to Slack». Поскольку вы выдаете логи, а вашим приложением пользуются несколько клиентов, нужно иметь возможность фильтровать информацию по релевантности.
Чтобы упростить ситуацию, вот вам новое эмпирическое правило (будьте гибкими):
Уровень
Когда используется
Для какой-то действительно повторяющейся информации. Возможно, было бы полезно выдавать весь контекст информации, но порой этого не нужно.
Когда происходит что-то важное, достойное того, чтобы о нем было известно большую часть времени.
Случилось что-то странное (но не прервало поток/операцию). Если проблема возникнет на более поздних этапах, такой лог может дать вам подсказку.
Произошла ошибка, ее следует устранить как можно быстрее.
Произошла очень серьезная ошибка, она требует немедленного вмешательства. Если не уверены в критичности ошибки, применяйте ERROR .
Для описанной системы/потоков, я бы использовал уровни логов, как определено:
Что делать с logger.critical и logger.warning ?
WARNING – недостаточно веская причина для остановки потока, однако это предупреждение на будущее, если возникнет какая-то проблема.
CRITICAL – самый тревожный предупреждающий лог, который вы когда-либо получите. По сути, он должен быть той самой причиной встать в три часа ночи и пойти что-то чинить.
Для этих случаев мы рассмотрим:
Для AWS: если какой-то регион AWS недоступен, мы можем предположить, что у пользователя там нет никаких ресурсов, поэтому можно двигаться дальше.
Для Slack: если OAuth завершится неудачно из-за невалидного id клиента, значит остальные пользователи столкнутся с той же проблемой, интеграция не отработает, пока мы вручную не сгенерируем новый id. Это дело кажется достаточно критичным.
Непопулярное мнение: использование DEBUG -уровня на продакшене
Да, я считаю, что логи DEBUG нужно использовать на продакшене.
Другой вариант – включить дебаг после того, как странная ошибка потребует более детального разбирательства.
Простите, но для меня такой вариант недопустим.
В реальном мире клиентам нужна быстрая реакция, командам нужно выполнять свою работу и постоянно поддерживать системы в рабочем состоянии. У меня нет времени и пропускной способности для нового деплоя или включения флага и ожидания повторения проблемы. Я должен реагировать на неожиданные проблемы в считанные секунды, а не минуты.
Правильно настройте логгер
Еще я замечаю, что люди испытывают трудности при настройке логгера (или вообще его не настраивают). Конечно, документация в Python не очень дружелюбная, но это не оправдание, чтобы вообще ее не трогать.
Использование ручных команд непросто поддерживать и понимать;
fileConfig – негибкая история, у вас не бывает динамических значений (без дополнительных фокусов);
dictConfig – простая история в запуске и настройке.
Я поделюсь несколькими советами и определениями, которые вам надо знать, а затем мы создадим окончательную конфигурацию на реальных примерах из проектов, над которыми я работаю.
Вот кусочек того, о чем мы будем говорить дальше:
Что такое логгеры?
В любом случае, придерживайтесь:
Форматируйте логи
Форматтеры вызываются для вывода конечного сообщения и отвечают за него преобразование в конечную строку.
Когда я работал в Zak (бывшем Mimic), и даже сегодня в Lumos мы форматировали логи как JSON. Он является хорошим стандартом для систем, работающих на продакшене, поскольку содержит множество атрибутов. Проще визуализировать JSON, чем обычную длинную строку, и для этого вам не нужно создавать свой собственный форматтер (ознакомьтесь с python-json-logger).
Для локальной разработки я рекомендую использовать форматирование по умолчанию для простоты.
Ваше решение будет зависеть от вида проекта. Для Tryceratops я решил использовать обычный форматтер, поскольку он проще и работает локально, там нет нужды в JSON.
Фильтруйте логи
Фильтры можно использовать либо для фильтрации логов (внезапно), либо для добавления дополнительного контекста в запись лога. Рассматривайте фильтры, как хуки, вызываемые до обработки итогового лога.
Их можно определить следующим образом:
Или их можно добавить прямо в логгер или обработчик для упрощения фильтрации по уровням (скоро будут примеры).
Обрабатывайте логи и то, как все связано
Обработчики представляют из себя комбинации форматтеров, выходных данных (потоков) и фильтров.
С ними вы можете создавать следующие комбинации:
Выводить все логи из info (фильтр), а потом выводить JSON в консоль.
Выводить все логи, начиная с error (фильтр) в файл, содержащий только сообщение и трассировку стека (форматтер).
Наконец логгеры указывают обработчикам.
Пример logging.dictConfig
Теперь, когда вы понимаете, что делают все эти объекты, давайте писать собственные! Как всегда, я постараюсь показать вам примеры из реальной жизни. Я буду использовать конфигурацию Tryceratops. Вы можете открыть ссылку и посмотреть самостоятельно окончательную конфигурацию.
Шаблон конфигурации логирования
Начнем с такого каркаса, создадим константу LOGGING_CONFIG :
Version всегда будет 1. Это плейсхолдер для возможных следующих релизов. На данный момент версия всего одна.
Я рекомендую оставить значение disable_existing_loggers в False, чтобы ваша система не поглощала другие неожиданные проблемы, которые могут возникнуть. Если вы хотите изменить другие логгеры, я бы порекомендовал их явно переписать (хоть это и скучно).
Корневой логгер можно определить тремя разными способами, что сбивает с толку:
Выбирайте любой! Мне нравится оставлять его снаружи, поскольку так он выглядит очевиднее и подробнее говорит о том, чего я хочу, ведь корневой логгер влияет на все другие определенные логгеры.
Конфигурация логирования: форматтеры
Я дополню пример из Tryceratops примером с JSON из Lumos.
Конфигурация логирования: обработчики
Конфигурация логирования: логгеры и root
Давайте разберемся, что происходит:
Кроме того, обратите внимание, что я могу переписать правила по умолчанию. Через настройки или позже динамически. Например, каждый раз, когда triceratops получает подобный флаг от CLI, он обновляет конфигурацию logging чтобы включить дебаг.
Логирование – это важно, но наличие хорошо структурированных исключений и блоков try/except также важно, поэтому вы можете также прочитать, как профессионально обрабатывать и структурировать исключения в Python.
Всех желающих приглашаем на demo-занятие «Основы ООП». Цели занятия: научиться работать с классами и познакомиться с наследованием.
Краткое содержание:
— мутабельность экземпляров класса
— передача аргументов в инициализатор
— наследование
— переопределение методов
— обращение к методам суперкласса
>> РЕГИСТРАЦИЯ