Log TXT, что это?

Многие пользователи популярной сети WhatsApp не знакомы со всем ее потенциалом. Известно, что это приложение для обмена сообщениями, фотографиями и видеороликами. Но куда же сохраняются медиафайлы, после того, как они приходят абоненту на устройство? Ответ изложен ниже.

Где хранятся медиафайлы в WhatsApp?

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

Если вы не желаете хранить принятые файлы на гаджете, следует выполнить такие действия:

  • запустите WhatsApp;
  • перейдите в раздел «Дополнительно”;
  • откройте «Настройки”;
  • выберите «Чаты и звонки”;
  • отключите «Сохранить медиа”.

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

После загрузки медиафайлов:

  • Фотографии и видеоролики будут сберегаться в папке «Фотографии” на устройстве. Если вы хотите разгрузить память телефона, выберите сохранение на карту памяти. Для этого зайдите в «Настройки”, откройте «Система” и выберите строку «Контроль памяти”. В моделях Windows 10 Mobile она называется «Хранилище”.
  • Благодаря файловому менеджеру можно получить доступ к голосовым сообщениям и аудиофайлам. Здесь нужно открыть раздел «SD карта” или «Телефон”, перейти в «Фотографии”, затем в «WhatsApp”. Обладателям Windows Phone 8.0 не предоставляется возможность сохранения аудиофайлов, их можно прослушивать только в чатах.
  • У владельцев Windows Phone 7 картинки будут храниться в папке «Сохраненные изображения”. Видео на устройстве не сохраняется.

Для чего нужна папка Voice Notes в WhatsApp?

У каждого смартфона присутствует функция, напоминающая о том, что свободное место на устройстве заканчивается. После этого пользователю предстоит почистить телефон и удалить ненужные файлы. Под этот критерий попадает и WhatsApp Voice Notes, так как она занимает много памяти. Что это за собрание файлов и для чего оно нужно?

Находится Voice Notes в телефоне в разделе «Ватсап”. В ней расположены голосовые сообщения и все аудиофайлы, которые пришли в мессенджере. Даже если некоторые из них вы не прослушивали, то при открытии сообщения, они все-равно сюда попадают. Папка наполняется по мере использования сервиса для общения. Если вы активный пользователь WhatsApp, то Voice Notes будет всегда полна информации.

Для улучшения скорости работы смартфона нужно время от времени очищать кэш. Стоит отметить, что удаляя данные с Voice Notes , на устройстве они остаются. Если же содержимое носит ценный характер, его можно перенести на какой-либо накопитель, а потом убрать.

Для чего нужна папка Sent в WhatsApp?

В папке Sent хранится отправленный вами материал через мессенджер. Чтобы добраться к ней, необходимо открыть диспетчер файлов, перейти на тот диск, который используется для хранения данных, найти папку «WhatsApp” и открыть ее. Здесь вы увидите папку «Media”, тапните по ней. На экране появится список с еще доступными папками, вам нужны «WatsApp Images” и «WatsApp Video”. В них собраны фото, видео, а также папка «Sent”. Здесь будут сберегаться даже удаленные с устройства медиафайлы.

Чтобы избавиться от лишней информации, зайдите в «Настройки” телефона, перейдите в «Приложения”, найдите «Галерею” и почистите кэш.

← →
Riply © (2007-06-23 07:06)

Здравствуйте !
Уже почти целый день бьюсь и никак не могу понять:
по какому принципу отсортированы записи в MFT 🙁
В общем случае, задача звучит так: по имени файла определить «номер записи в MFT».
Если постараться, то, вроде, ее можно свести к
«написанию» функции сравнения двух записей в MFT:
function Ntfs_RecordCompare(const pRec1, pRec2: PFILE_RECORD_HEADER): integer;
При помощи «метода научного тыка», можно сделать (ну очень шаткое) предположение,
что результат этой функции зависит от следующих параметров FILE_RECORD_HEADER:
Ntfs.Usn: Int64;
// The Update Sequence Number of the NTFS record.
Flags: USHORT;
// A bit array of flags specifying properties of the MFT entry.
// The values defined include: 0x0001 = InUse, 0x0002 = Directory
BytesInUse: ULONG;
// The number of bytes used by the MFT entry.
Сюда же надо добавить параметры из FILENAME_ATTRIBUTE
DirectoryFileReferenceNumber: ULONGLONG;
// The file reference number of the directory in which the filename is entered.
NameType: UCHAR;
//The type of the name.A type of zero indicates an ordinary name, a type of one indicates
//a long name corresponding to a short name, and a type of two indicates a short
//name corresponding to a long name.
А также, от того является ли данная запись, записью «системного файла» или нет.
То что зависит от NameType, у меня вообще в голове не укладывается.
Остальные, хоть как-то да можно объяснить( с натяжкой) 🙂
P.S. Что-то я совсем запуталась 🙁

← →
Riply © (2007-06-23 12:25)

Интересно: если у DirectoryFileReferenceNumber рассматривать
только последние 48 бит: NewNum := (DirectoryFileReferenceNumber and $0000FFFFFFFFFFFF),
то начинает проявляться что-то напоминающее закономерность 🙂
При (NewNum >= 30), если рассматривать объекты типа «FILE», исключив директории,
то оставшиеся записи в MFT отсортированы по NewNum.
NewNum меньше 30 имеют файлы типа: $ObjectID, $LogFile и т.п.
Исключение составляют три файла: MOUNP~1, bootex.log и tracking.log
Что это за файлы — не знаю.
Explorer их не находит(к разряду «уничтоженных» они не относятся).
$ — файлы, бог с ними. Они не от мира сего 🙂
А вот если бы суметь «объяснить» неувязочку с этими тремя файлами,
то у нас появилось бы некое подобие сортировки 🙂
Никто не знает кто они такие ?
P.S. Подопытный диск не системный.

← →
Anatoly Podgoretsky © (2007-06-23 12:38)

Ну ты дала, нашла где задавать такой вопром, а ну бегом в WinAPI

← →
Dimaxx © (2007-06-23 16:47)

> MOUNP~1, tracking.log
Лежат в папках SystemVolumeInformation, по умолчанию к ней (и всему содержимому) имеет доступ тока сама винда. Хотя ничто не препятствует сделать до содержимого доступ себе… 🙂

← →
Dimaxx © (2007-06-23 16:49)

> NewNum меньше 30 имеют файлы типа: $ObjectID, $LogFile и
> т.п.
Насколько я понимаю — это файлы невидимые для пользователя. Поэтому не учитывай их — они нужны для функционирования файловой системы NTFS.

← →
Riply © (2007-06-24 01:37)

> Dimaxx © (23.06.07 16:47)
>> MOUNP~1, tracking.log
>Лежат в папках SystemVolumeInformation
Спасибо.
Видимо, я пошла не тем путем 🙁
Можно, конечно, сказать про $-файлы и файлы из SystemVolumeInformation
что «это неправильные пчелы» (с) Винни и убрать их из рассмотрения 🙂
Но, мне не нравятся правила, в котроых есть исключения :).
Алгоритм существует. Просто обязан быть. Про него известно следующее:
Базовый принцип: минимальное количество обращений
к диску при поиске записи, соответствующей файлу.
Чем меньше «вложений» в имени файла,
тем меньше обращений к диску требуется системе для его нахождения.
Скорее всего я не там его ищу.
Видимо, есть еще какие-то характеристики, про которые я еще не знаю (пока не знаю 🙂
Anatoly Podgoretsky © (23.06.07 12:38)
>Ну ты дала, нашла где задавать такой вопром, а ну бегом в WinAPI
Ну вот. Дожили. Ликвидированы последние остатки демократии. 🙂
Теперь прогоняют даже из «начинающих» 🙂

← →
Германн © (2007-06-24 02:34) ← →
Riply © (2007-06-24 03:01) ← →
Германн © (2007-06-24 03:14) ← →
tesseract © (2007-06-24 12:28)

> В общем случае, задача звучит так: по имени файла определить
> «номер записи в MFT».
> В MFT (NTFS) нет «прошитого» алгоритма сортировки 🙂
NTFS использует B-tree организацию, какой номер записи?. То что ты упоминаешь это файловые потоки, их может быть до 2^32 если правильно помю Руссиновича.

← →
Riply © (2007-06-24 14:10)

> tesseract © (24.06.07 12:28)
>NTFS использует B-tree организацию, какой номер записи?.
«The filename attribute is always resident.» (с) Gary Nebbett
Отсюда делаем вывод, что для каждого файла, в MFT существует NTFS_RECORD,
сожержащая базовую информацию о файле «внутри себя» (в том числе и его имя).
Эту запись можно найти, например, используя FileReferenceNumber.
Следовательно, можно построить соответствие Файл —> NTFS_RECORD.
Порядковый номер этой записи и имеется ввиду.
Использование же ATTRIBUTE_LIST для хранения атрибутов файла, ничего не меняет,
т.к. внутри MFT все равно есть NTFS_RECORD с filename attribute, содержащий еще и ссылку на этот лист.
>NTFS использует B-tree организацию
Да, использует. Например, в таких структурах как: NTFS_RECORD_HEADER с типом «INDX» (INDEX_ROOT)
или в атрибутах типа AttributeIndexRoot, один из вариантов — хранение (резидентно или нет) списка файлов в данном каталоге.
Но, даже, если он (список) не резидентный, то все равно, его «начало» резидентно.
Поэтому, я не понимаю исходя из ты противопоставляешь:
«NTFS использует B-tree организацию» и «какой номер записи»
>То что ты упоминаешь это файловые потоки, их может быть до 2^32 если правильно помю Руссиновича.
Эту фразу я совсем не поняла. Что имеется ввиду под «То что ты упоминаешь» ?
И какую роль играет то, сколько потоков у файла ?

← →
Riply © (2007-06-24 14:18) ← →
Игорь Шевченко © (2007-06-25 10:16)

> по какому принципу отсортированы записи в MFT 🙁
По FILEID
Я же говорил, читай Неббета. Марш в библиотеку!

← →
Riply © (2007-06-25 11:40) ← →
Игорь Шевченко © (2007-06-25 12:19) ← →
vpbar (2007-06-25 14:44)

Звиняйте, что лезу. Но просьба — развивайте тему. Может найдете что нибудь позволяющее получить целочисленный идентификатор(ID) для файла (типа i-node в unix системах) чтоб затем по этому ID можно было найти файл (определить имя, размер и т.д). А то я искал искал, но не нашел.
Нашел только GetFileInformationByHandle которая вроде возвращает чтото похожее ID (http://vsokovikov.narod.ru/New_MSDN_API/Menage_files/str_by_handle_file_information.htm) но как затем по этим nFileIndex найти файл — непонятно.
Так что, успехов.

← →
Riply © (2007-06-25 15:05) ← →
Игорь Шевченко © (2007-06-25 15:40)

Riply © (25.06.07 15:05)
Оно и есть. В приложении описание структур NTFS и примеры работы через FILEID

← →
Игорь Шевченко © (2007-06-26 09:49)

Riply © (25.06.07 15:05)
Есть такая полезная функция Nt(Zw)QueryInformationFile. Указывая в качестве FileInformationClass FILE_INTERNAL_INFORMATION как раз получается заветный FileID для известного файла. А у файлов метаданных NTFS эти самые FileID»s ваще фиксированные.

← →
vpbar (2007-06-26 11:10)

>>Riply ©
>> Например, через IoControlDevice
Ууу. Муторно. К тому же IoControlDevice , по-моему, работать будет только под админом.
Видимо в данном случае нет нормальных решений.

← →
Игорь Шевченко © (2007-06-26 11:21) ← →
Riply © (2007-06-26 14:36)

> Игорь Шевченко © (25.06.07 15:40)
>Оно и есть. В приложении описание структур NTFS и примеры работы через FILEID
С этим приложением, с грехом попалам, вроде, разобралась.
Правда, не совсем уверена, что приложения у нас одинаковые: нет у меня рассуждений о том, что
«when you try to open an file with a filenumber that doesn»t exist,
it returns a handle to the file that has the largest possible filenumber
under the number you specified»
> Игорь Шевченко © (26.06.07 09:49)
>Есть такая полезная функция Nt(Zw)QueryInformationFile.
>Указывая в качестве FileInformationClass FILE_INTERNAL_INFORMATION как раз получается заветный FileID для известного файла.
>А у файлов метаданных NTFS эти самые FileID»s ваще фиксированные.
Попробовала: действительно, полезная. 🙂 Спасибо.
Что же. Для начала, не все так плохо, как кажется 🙂
Теперь у нас есть широкие возможности, для работы с файловой системой.
Но, есть и ложка дегтя:
Для работы, нам необходим FILE_ANY_ACCESS уровень доступа (для получения FileID).
Я понимаю, что с этим уровнем, нам доступны практически все файлы в системе,
но хочеться вообще убрать ограничение.
Это реально. Нужно научиться находить «файловую запись» только по имени файла, без его открытия.
И здесь, к сожалению, если я не ошибаюсь, FILEID — нам не помошник 🙁
Перебирая файлы на диске (через MFT) и просматривая их св-ва,
я убедилась, что «исходно» FILEID не нулевой у очень ограниченного кол-ва файлов.
При открытии какого-то файла ID у него появляется и, даже, остается после его закрытия.
Но нам от этого пользы мало 🙁
Пытаюсь делать так. (Допустим, мы ищем C:\Dir1\Dir2\Dir3\Test.txt)
Открываем в MFT корневую директорию и в ее IndexRoot атрибутах пытаемся найти Dir1.
Найдя Dir1 начинаем просматривать ее(Dir1) IndexRoot, в поисках Dir2 и т.д.
Вот «просматривать» INDEX_ROOT у меня (пока) и не получается.
А может, надо искать вовсе не в INDEX_ROOT ?
P.S.
Когда восстанавливают информацию, идут другим путем:
Начинают с удаленного файла.
В нем есть ссылка на директорию, в которой он находился, в которой есть ссылка… и т.д.
С оговоркой: если я правильно поняла 🙂

← →
vpbar (2007-06-26 15:21)

>>Игорь Шевченко © (26.06.07 11:21)
Прочитал после моего сообщения (видно страница не успела обновиться). Спасибо не знал. Хотя по видимомо этот FileID тотже что и для GetFileInformationByHandle (в ней идет обращение к NTQueryInformationFile).
А потом по этому FileID можно найти файл (определить имя, размер и т.д). А то если нет, то я не буду пока искать более подробную инфу по NTQueryInformationFile

← →
Riply © (2007-06-26 22:09)

:))
Попутно решаются всякие смешные задачки.
Давным-давно, я интересовалась:
можно ли не пробегая FindFist/FindNext»ом узнать кол-во файлов в диретории,
для отображения в ProgessBar процесса их обработки(не помню какой).
Нужно было установить максимальную позицию.
Тогда мне сказали, что «низяяяя» 🙂
Через MFT на получение кол-ва директорий и файлов на всем диске уходит 380 ms 🙂

← →
Игорь Шевченко © (2007-06-27 09:54)

Riply © (26.06.07 22:09)
Заведи каталог с несколькими десятками тысяч файлов и посчитай через MFT, чтобы жизнь не казалась пресной

← →
Riply © (2007-06-27 11:59)

> Игорь Шевченко © (27.06.07 09:54)
>Заведи каталог с несколькими десятками тысяч файлов и
>посчитай через MFT, чтобы жизнь не казалась пресной
Попробовала посчитать весь «системный диск»:
TimeOut: 1297
Objects Count: 84 974
FilesCount: 78 031
DirCount: 6 927
UnUseFiles: 15
UnUseDir: 1
(TimeOut — в милисекундах)
Причем, перебирается процедурой, написанной не для подсчета.
Т.е. если ее(процедуру) «заточить» именно для этого,
то результаты будут гораздо лучше 🙂
Так что я, пока еще, в розовых очках, жизнь кажется прекрасной и совсем «не пресной» 🙂

← →
Игорь Шевченко © (2007-06-27 12:20)

Riply © (27.06.07 11:59)
Ты не поняла. Я имею в виду, что если ты создашь каталог с большим количеством файлов, у тебя элемент в MFT может разползтись и жизнь пресной не покажется, если ты собираешься считать количество файлов. В реализации FindFirst/FindNext все эти нюансы учтены (в NtQueryDirectoryFile)

← →
Riply © (2007-07-02 00:44)

Пытаюсь построить MFT дерево, но на некоторых файлах получаю AV.
Вот экстракт проблеммы:
Структура «базовых» атрибутов
type
PATTRIBUTE = ^ATTRIBUTE;
ATTRIBUTE = record
AttributeType: ATTRIBUTE_TYPE;
Length: ULONG;
Nonresident: BOOLEAN;
NameLength: UCHAR;
NameOffset: USHORT;
Flags: USHORT;
AttributeNumber: USHORT;
end;
И тестировочная функция, которая подсчитывает, сколько разных атрибутов в нашей записи:
function EnumAttribute(const pFileRec: PFILE_RECORD_HEADER): integer;
var
pBaseAttr: PATTRIBUTE;
begin
Result := 0;
if pFileRec.Flags = 0 then Exit;
pBaseAttr := PATTRIBUTE(DWord(pFileRec) + pFileRec.AttributesOffset);
while (pBaseAttr <> nil) and (DWord(pBaseAttr.AttributeType) <> MAXDWORD) do
begin
inc(Result);
if pBaseAttr.Length > 0
then pBaseAttr := PATTRIBUTE(Dword(@pBaseAttr) + pBaseAttr.Length)
else Break;
end;
end;
Вылетаем очеь редко ( примерно один файл на 20000 ).
Механизм вылета простой: Неожиданно параметр Length принимает астрономически большое значение.
Ну и, разумеется, по такому смещению нас выбрасывает черти-куда 🙂
При сканировании всего дерева MFT, раз двадцать это может быть на одном и том же файле.
Потом, вдруг, мы его проходим нормально, но появляется другой 🙂
Сразу оговорюсь:
Все стальные параметры в норме (в «связанных» структурах тоже), никаких отклонений.
AV — шный файл не испорчен, никем не используется, к всяким «незявным» не относится 🙂
— обычный txt, pas или jpeg.
ChkDisk — ом проверяла.
Такое впечатление, что он (Length) «законно» может принимать такие значения
и, в этих случаях, их надо трактовать как-то по-другому.
Подскажите, пожалуйста, в чем может быть дело ?

← →
Игорь Шевченко © (2007-07-02 10:06)

> Подскажите, пожалуйста, в чем может быть дело ?
Хотел бы я знать, в какой ситуации pBaseAttr может принять значение nil…

← →
Riply © (2007-07-02 13:38) ← →
Игорь Шевченко © (2007-07-02 14:28)

А что пишет Неббет про значения полей в записях ? 🙂
Мы так и будем в допрос партизана играть ?

← →
Riply © (2007-07-02 15:06)

> Игорь Шевченко © (02.07.07 14:28)
>Мы так и будем в допрос партизана играть ?
Нет. не будем 🙂 Просто очень сложно «варварски выдирать код» 🙂
>А что пишет Неббет про значения полей в записях ? 🙂
В той статье, что у меня — ничего,
но алгоритм поиска нужного атрибута в FILE_RECORD_HEADER такой же.
Кажется, разбирая DIRECTORY_INDEX, я учитываю не все обстоятельства.
Скорее всего, ошибка закрадывается раньше, при «прыжках» с одного «узла» на другой,
а проявляется при разборе полученных структур.
Попробую еще раз проверить алгоритм,
может смогу более конкретно описать условия ее(ошибки) возникновения.(а может и исправить ее 🙂

← →
Riply © (2007-07-02 23:02) ← →
Игорь Шевченко © (2007-07-03 09:47)

Riply © (02.07.07 23:02)
> С чем это может быть связано ?
С ошибкой выравнивания ?
Ты, если хочешь нормальной помощи, собери проект, чтобы его можно было откомпилировать и запустить, да и выложи куда, а то и на мыло брось. Мыло вроде знаешь

← →
SLoW.AlfaMoon.Com (2007-07-03 11:58)

собери проект, чтобы его можно было откомпилировать и запустить, да и выложи куда
+1

← →
Riply © (2007-07-03 15:12) ← →
Игорь Шевченко © (2007-07-03 15:26)

> На это потребуется время.
Я не тороплюсь 🙂
> Обязательно воспользуюсь, хотя и это и не очень удобно:
Нормально.

← →
Игорь Шевченко © (2007-07-03 15:28) ← →
xShadow © (2007-07-03 15:45)

> Riply ©
Когда человек реально хочет помощи, то выкладывает исходники, тут каждый по разу посмотрит что-то подправит. Десять голов лучше одной 🙂
З.Ы. Все когда начинали 😉

← →
Riply © (2007-07-04 06:47)

Актуальные it обзоры

MTKLogger в Андроиде — что это такое?

Всем привет! Сегодня мы кратко расскажем про Андроид приложение — MTKLogger, а вы поймете что это за программа и нужна ли она вам на смартфоне.

Некоторые пользователи Андроид замечают появление неизвестного приложения MTKLogger на своих смартфонах. Автоматическая установка, в наши дни, воспринимается как вирус, но в данном случае спешу вас успокоить — МТК Логгер не является вирусным приложением.

MTKLogger — это программа для сбора и обработки системных логов, работающая на процессорах МТК.

Такой сбор логов ведется на многих ОС, например в Windows это называется «журнал». Все записанные логи сохраняются в отдельную системную папку mtklog. Если говорить о надобности этого приложения для простых пользователей, коих большинство, то программка не пригодится, а вот для тех, кому необходимо иметь всю статистику, тогда МТКЛоггер пригодится.

MTKLogger собирает логи, однако, они имеют размер, и чем больше логов будет сохранятся, тем больше места будет занимать папка mtklog. Это большой минус данного приложения. Если места у вас и так не особо много, тогда вы можете остановить и удалить MTK Logger.

Как удалить приложение?

Для того чтобы убрать MTK Logger и не нагружать систему, необходимо:

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

  2. Открыть закладку Log and Debugging и выбрать там пункт MTKLogger.
  3. Просмотрите функции MobileLog, NetworkLog, а также ModemLog и установите переключатель в неактивное положение.
  4. Удалите папку mtklog и установочный файл приложения mtklogger.apk в папке systemapp. Для удаления файлов и папок нужны root-права.

На этом все. Надеюсь вы разобрались с тем, что это за программа MTKLogger и сможете удалить её.

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

indianlarry, обязательно. ) Однако это не помогает и после перезагрузки в LogCat логи сыпятся как обычно. Может от прошивки зависит, хотя не должно.

—DEFENDER—, можно. Скрипт для init.d

Работает гораздо надёжней, но надо чтоб была поддержка init.d. Вроде как в файле build.prop можно отключить, но я не заморачивался. А вообще, почитайте тут: Скрипты, твики, собери их все

Сообщение отредактировал jockjoint — 15.09.14, 09:50

в билд проп в инете пишут вот:
# Disable logcat (Android Logger). The will improve performance
logcat.live=disable

но как проверить все ли 4 лога отключаются?
и как узнать отключились ли логи при использование init.d?

Сообщение отредактировал —DEFENDER— — 15.09.14, 10:17

Как включить/отключить уровни журналов в Android?

143 d-man

У меня есть множество операторов регистрации для отладки, например.

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

16 ответов

78 Решение Cytown

Общим способом является создание имени именованного логического уровня и определение его уровня отладки на основе loglevel.

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

185 Dave Webb

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

Таким образом, вы можете захотеть удалить дескрипторы журнала Verbose, возможно, используя ProGuard, как это предлагается в другом ответе.

В соответствии с документацией вы можете настроить ведение журнала на устройстве разработки с помощью System Properties. Свойство для установки равно log.tag. , и оно должно быть установлено на одно из следующих значений: VERBOSE , DEBUG , INFO , WARN , ERROR , ASSERT или SUPPRESS . Дополнительная информация об этом доступна в документации для метода isLoggable() .

Вы можете временно установить свойства, используя команду setprop . Например:

В качестве альтернативы вы можете указать их в файле ‘/data/local.prop’ следующим образом:

В более поздних версиях Android требуется, чтобы /data/local.prop был доступен только для чтения. Этот файл читается во время загрузки, поэтому вам необходимо перезапустить его после его обновления. Если /data/local.prop доступен для записи в мире, он, вероятно, будет проигнорирован.

Наконец, вы можете установить их программно, используя метод System.setProperty() .

Самый простой способ — запустить ваш скомпилированный JAR через ProGuard перед развертыванием с конфигурацией вроде:

Это будет — кроме всех других оптимизаций ProGuard — удалите любые подробные записи журнала непосредственно из байт-кода.

18 kdahlhaus

Я сделал простой маршрут — создав класс-оболочку, который также использует списки переменных параметров.

Лучше всего использовать API SLF4J + часть его реализации.

Для приложений Android вы можете использовать следующее:

Вы должны использовать

4 larham1

Удаление журнала с помощью proguard (см. ответ от @Christopher) было простым и быстрым, но оно вызвало трассировку стека из производства, чтобы не соответствовать источнику, если в файле было зарегистрировано отладочное ведение журнала.

Вместо этого здесь используется метод, который использует разные уровни регистрации в процессе разработки или производства, предполагая, что proguard используется только в производстве. Он распознает производство, увидев, что proguard переименовал данное имя класса (в примере я использую «com.foo.Bar» — вы замените это на полностью квалифицированное имя класса, которое, как вы знаете, будет переименовано proguard).

В этом методе используется запись в сообществах.

Существует небольшая замена для стандартного класса Android Android — https://github.com/zserge/log

В основном все, что вам нужно сделать, это заменить импорт с android.util.Log на trikita.log.Log . Затем в Application.onCreate() или в каком-то статическом инициализаторе проверьте BuilConfig.DEBUG или любой другой флаг и используйте Log.level(Log.D) или Log.level(Log.E) , чтобы изменить минимальный уровень журнала. Вы можете использовать Log.useLog(false) , чтобы вообще отключить ведение журнала.

Log4j или slf4j также могут использоваться в качестве фреймворков регистрации в Android вместе с logcat. См. Проект android-logging-log4j или поддержка log4j в android

Вот более сложное решение. Вы получите полную трассировку стека, и метод toString() будет вызываться только при необходимости (Performance). Атрибут BuildConfig.DEBUG будет ложным в рабочем режиме, поэтому все журналы трассировки и отладки будут удалены. Компилятор горячей точки имеет возможность удалить вызовы из-за окончательных статических свойств.

2 Donkey

Это позволяет вам иметь прекрасный контроль над журналами. Вы можете, например, отключить все журналы или только журналы некоторых пакетов или классов.

Кроме того, он добавляет некоторые полезные функции (например, вам не нужно передавать тег для каждого журнала).

Я создал утилиту /Wrapper, которая решает эту проблему + другие общие проблемы, связанные с журналом.

Утилита отладки со следующими функциями:

  • Обычные функции, предоставляемые классом Log, обернутые LogMode s.
  • Журнал ввода-выхода метода: может быть отключен коммутатором
  • Селективная отладка: отладка определенных классов.
  • Измерение времени выполнения метода: измерение времени выполнения для отдельных методов, а также коллективное время, потраченное на все методы класса.

  • Включите класс в свой проект.
  • Используйте его, как вы используете методы android.util.Log, для начала.
  • Используйте функцию журналов Entry-Exit, разместив вызовы методов entry_log() — exit_log() в начале и конце методов в вашем приложении.

Я попытался сделать документацию самодостаточной.

Предложения по улучшению этой утилиты приветствуются.

Загрузите его из GitHub.

1 Darnst

В моих приложениях у меня есть класс, который обертывает класс журнала, который имеет статический логический var, называемый «state». Во всем моем коде я проверяю значение переменной «состояние», используя статический метод, прежде чем писать в журнал. Затем у меня есть статический метод для установки переменной состояния, которая гарантирует, что значение является общим для всех экземпляров, созданных приложением. Это означает, что я могу включить или отключить все протоколирование для приложения одним звонком — даже когда приложение запущено. Полезно для вызовов поддержки. Это означает, что вы должны придерживаться своего оружия при отладке, а не регрессировать, чтобы использовать стандартный класс журнала, хотя.

Также полезно (удобно), что Java интерпретирует логический var как false, если ему не присвоено значение, что означает, что он может быть оставлен как false до тех пор, пока вам не понадобится включить ведение журнала: -)

Мы можем использовать класс Log в нашем локальном компоненте и определить методы как v/i/e/d. Основываясь на необходимости, мы можем позвонить дальше.
пример показан ниже.

здесь сообщение для string , а args — это значение, которое вы хотите распечатать.

1 Jim

В очень простом сценарии ведения журнала, где вы буквально просто пытаетесь писать на консоль во время разработки для целей отладки, проще всего просто выполнить поиск и заменить перед вашей производственной сборкой и прокомментировать все вызовы в журнал или System.out.println.

Например, если вы не используете «Журнал». где-либо вне вызова Log.d или Log.e и т.д., вы можете просто найти и заменить все решение для замены «Log». с «//Log». прокомментировать все ваши вызовы регистрации, или, в моем случае, я просто использую System.out.println всюду, поэтому, прежде чем приступать к производству, я просто сделаю полный поиск и замените для «System.out.println» и заменим на «//System.out.println».

Я знаю, что это не идеально, и было бы неплохо, если бы способность находить и прокомментировать вызовы Log и System.out.println были встроены в Eclipse, но до тех пор, пока это не будет самым простым и быстрым и лучшим способом сделайте это, чтобы прокомментировать поиск и заменить. Если вы это сделаете, вам не нужно беспокоиться о несоответствии номеров строк трассировки стека, потому что вы редактируете исходный код, и вы не добавляете никаких накладных расходов, проверяя конфигурацию уровня журнала и т.д.

Для меня часто бывает полезно установить разные уровни журналов для каждой TAG.

Я использую этот очень простой класс-оболочку:

Теперь просто установите уровень журнала на TAG в начале каждого класса:

MTKLogger: что это такое?

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

MTKLogger — это специальное приложение для сбора системных логов на платформах на базе процессоров MTK. Приложение выполняет ту же самую функцию, что и журнал в операционной системе Windows — сохраняет логи в папке под названием mtklog.

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

Казалось бы, почему бы не забыть об этом приложение? Дело в том, что размер папки с логами может увеличиваться и увеличиваться настолько, что занимает немало свободного пространства, поэтому от логов стоит избавиться. Чтобы отключить MTKLogger, нужно:

  • Зайти в инженерное меню на устройстве.
  • Найти вкладку Log and Debugging.
  • Выбрать пункт MTKLogger.
  • В настройках отключить с помощью переключателей разделы MobileLog, ModemLog и NetworkLog.
  • Выйти из инженерного меню.
  • Удалить папку mtklog.

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

  • Оставить комментарий к статье.

I assume most of you are aware of android.util.Log All logging methods accept ‘String tag’ as a first argument.

And my question is How do you usually tag your logs in your applications? I’ve seen some hardcode like this:

This doesn’t look nice because of many reasons:

Is there any neat way to get a TAG for a class?

13 Answers

I use a TAG, but I initialise it like this:

This way when I refactor my code the tag will also change accordingly.

EDIT: Improved per br mob comment ( Thanks 🙂 )

And when I want to use it:

Go to Android Studio -> preference -> Live Templates -> AndroidLog then select Log.d(TAG, String).

In Template text replace

android.util.Log.d(TAG, «$METHOD_NAME$: $content$»);

android.util.Log.d(«$className$», «$METHOD_NAME$: $content$»);

Then click Edit variables and enter className() in the Expression column next to the className Name column.

Now when you type the shortcut logd it will put

You dont need to define a TAG anymore.

log file, лог-файл, логи, logs.

Возможно, вам встречались эти слова?

Хочу рассказать, что это такое и зачем они нужны.

Иногда бывает, нужно посмотреть:

1) ошибки, которые возникали при обращении к сайту;

2) Кто и сколько раз приходил на сайт;

3) Параметры посещений (каким браузером и откуда был выполнен переход и.т.д.);

В общем, нужна статистика сайта.

Конечно, есть современные системы статистики, такие как Google Analytics и Яндекс.Метрика, которые позволяют получать эти данные в удобном виде.

Но, бывают ситуации, что на некоторых сайтах эти системы не установлены, а получить статистику все равно нужно.

Например, произошла какая-то критическая ситуация с сайтом и вам нужно выяснить что произошло, а никаких систем статистики на сайте не было.

Как быть?

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

Эти файлы и называются логами (log file, log-файлами, лог-файлы, логи).

В общем, логи – это текстовые файлы, в которых хранится информация о посещениях, параметрах посещений вашего сайта и ошибках, которые возникали на нем.

Имя файла логов, для наглядности и чтобы можно было понять их назначение, состоит из двух частей:

Назначение_log

Т.е. указывается назначение файла и добавляется приставка «_log».

Данные о посещениях

Данные об ошибках

Логи создаются серверным программным обеспечением. Этим они отличаются от систем Яндекс.Метрика и Google Аналитика, которые работают на основе Javascript-кода. Этот код встраивается на веб-страницы и передается браузером посетителя (клиентом) в базу данных систем статистики, которая хранится уже не на вашем сайте, а на сервере статистики.

WPuse.ru 27.10.2017

Приветствую, посетитель!

При детальном изучении файлов WordPress сайта, что располагается хостинге, вы можете встретить файл под именем debug.log, который обычно располагается в поддиректории под названием …/wp-content/ Этот файл накапливает в себе информацию об ошибках при работе вашего сайта.

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

Если же говорить о его важности для функционирования WordPress сайта, то его наличие или отсутствие не оказывается какого-либо влияния. Это второстепенный текстовый файл (лог файл), который создаётся, если в конфигурационном файле WordPress включён режим отладки.

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

Вы можете отключить режим отладки, а сам файл удалить и это никак не повлияет на стабильность и\или скорость сайта.

И если размещённая в данном файле информация вам ни о чём не говорит, то даже рекомендуется это сделать. Осуществить сие очень просто, необходимо отредактировать всего лишь одну строчку с параметром в конфигурационном файле WordPress (именуется wp-config.php). Информацию об этом вы можете прочесть в статье, ссылка на которую приведена чуть выше.

Более того, режим отладки по умолчанию у WordPress выключен. Этот режим мог быть включён технической поддержкой хостинга, дабы понять, проблема на их стороне с серверным оборудованием, или это что-то с вашим сайтом. Также этот режим мог включить Веб-мастер (технический специалист), которому вы доверили внедрение нового функционала, решение проблем и ошибок с вашим сайтом.