Удалить логи питона и кэш игры что это
Logging — библиотека для удобного ведения логов в Python
В любой разработке приходится рано или поздно вести логи, ведь не отдашь же заказчику программу где отладочные сообщения выводятся с помощью print, да и в дальнейшем если у заказчика что то пойдет не так то можно просто попросит показать лог и понять в чем проблема(в большинстве случаев), так вот в питоне есть очень мощная и удобная библиотека и дальше я попробую про нее рассказать.
Для начала подключим библиотеку и попробуем вывести на консоль сообщения разного типа:
При выводе мы получаем:
Как мы видим то при выводе мы получаем все кроме сообщений отладки и информационных, для того что бы мы могли их увидеть нужно в настройки логера передать уровень выводимых ошибок:
Сразу хочу оговориться что конфигурационые параметры должны передаваться до первого вызова вывода ошибки, вот код:
Теперь после вывода мы получим все сообщения:
Но все равно как то скудно выглядит вывод из него мало чего поймешь, для это так же в конфиге логера можно задать формат выводимого сообщения, посмотреть все атрибуты можно (вот здесь):
теперь после вывода мы получаем вот такие сообщения:
Уже что то больше похожее на логи и видно имя файла и строка в которой вызванно сообщение, но выводить их во время работы хорошо когда идет разработка ну а при сдаче проекта лучше их писать в файл, так давайте запишем их туда, для этого так же в конфигурации предусмотрен параметр для того что бы указать куда будем писать лог:
Удалить логи питона и кэш игры что это
В стандартной библиотеке Python есть замечательный пакет для логирования — logging. В сети бытует мнение, что он сложный и настраивать его сплошная боль. В этой статье я попробую убедить вас в обратном. Мы разберём что из себя представляет этот пакет, изучим основные компоненты и закрепим материал практическим примером.
Зачем нужны логи?
logging и Python
Точкой входа в работу с логированием в Python является библиотека logging. На первый взгляд может показаться, что библиотека сложная и запутанная, но потратив некоторое время на её изучение, можно убедиться в обратном. Для меня logging это классический пример дизайна ООП, где композиция преобладает над наследованием, поэтому в исходном коде библиотеки можно встретить множество функциональных классов. Цель этого туториала разобрать по косточкам каждый класс и воссоединить их в единый механизм логирования в Python. Начнём-с.
Logger
Чтобы начать работу с logging необходимо в импортировать библиотеку logging и вызвать функцию getLogger, передав ей имя будущего логера. Функция вернёт инстанс объекта Logger. Логер это рычаг за который мы дёргаем каждый раз, когда нам нужно записать информацию в лог.
Handler
Это далеко не полный список. Чтобы посмотреть все, перейдите по ссылке выше. Для указания Handler, необходимо у инстанса Logger вызвать метод addHandler и передать туда инстанс класса Handler. У одного Logger инстанса может быть множество обработчиков.
Пример записи лога в stdout:
Наверняка вы обратили внимание, что лог содержит всего лишь переданную строку. Как сделать так, чтобы в логе была информация об уровне лога, времени записи?
Formatter
Обратите внимание на строку, которую я передал при инициализации инстанса Formatter :
Filter
Наглядно и понятно, разве logging может быть сложным? 😎
LoggerAdapter
Адаптер нужен для передачи дополнительной контекстной информации при каждой записи лога через Logger. Например, вы написали веб-приложение и вам необходимо в логи дополнительно передавать username пользователя:
extra и не только
Теперь вывод значения ключа response можно указать через Formatter (при условии, что response передаётся всегда):
Аргумент extra удобен при написании своих кастомных обработчиков логов (например, отсылка логов в телеграм). Далее я покажу пример кастомного Handler класса для отправки логов в Telegram через бота.
Конфигурация logging
Официальная документация рекомендует конфигурировать logging через python-словарь. Для этого необходимо вызвать функцию logging.config.dictConfig и передать ей специальный словарь. Схема словаря описана здесь. Я лишь вкратце пробегусь по основным ключам:
Ранее все настройки я задавал кодом через вызов методов. Это может быть удобно, если у вас 1 модуль, но когда таких модулей становится множество, то в каждом из них задавать общие настройки кажется излишним занятием. Давайте попробуем все настройки задать в одном месте:
Неправда ли удобно? В реальных приложениях настройки выносят в отдельный модуль, который обязательно импортируется на старте, например, модуль в settings.py как в Django. Именно в нём задаются глобальные настройки для всех логеров приложения.
Наследование в logging
Отправляем логи в Telegram
Чтобы создать свой обработчик, необходимо наследоваться от класса Handler и перезаписать метод emit :
Чтобы обработчик начал свою работу, достаточно в настройках вашего логера прописать новый обработчик:
Заключение
В этой статье я постарался вкратце рассказать и показать основные сущности библиотеки logging, а также продемонстрировать гибкий механизм логирования в python. Надеюсь мне это удалось, и статья оказалась для вас полезной.
Если Вы хотя бы немного знакомы с программированием и пробовали запускать что-то «в продакшен», то вам наверняка станет больно от такого диалога:
Да, у Василия, судя по всему, не настроено логирование. И это ужасно, хотя бы по нескольким причинам:
Впрочем, последний пункт, наверно, лишний. Однако, одну вещь мы поняли наверняка:
Логирование — крайне важная штука в программировании.
Что такое logging?
Модуль logging в Python — это набор функций и классов, которые позволяют регистрировать события, происходящие во время работы кода. Этот модуль входит в стандартную библиотеку, поэтому для его использования достаточно написать лишь одну строку:
У функции basicConfig() 3 основных параметра:
Давайте рассмотрим каждый из параметров более подробно.
Уровни логирования на Python
Соответственно, чтобы не засорять логи лишней информацией, в basicConfig() Вы можете указать минимальный уровень фиксируемых событий.
По умолчанию фиксируются только предупреждения ( WARNINGS ) и события с более высоким приоритетом: ошибки ( ERRORS ) и критические ошибки ( CRITICALS ).
Отображение лога и запись в файл
Другими словами, если Вы просто выполните такой код:
Ок, с записью в файл и выбором уровня логирования все более-менее понятно. А как настроить свой шаблон? Разберёмся.
Кстати, мы собрали для Вас сублимированную шпаргалку по логированию на Python в виде карточек. У нас ещё много полезностей, не пожалеете 🙂
Форматирование лога
Итак, последнее, с чем нам нужно разобраться — форматирование лога. Эта опция позволяет Вам дополнять лог полезной информацией — датой, названием файла с ошибкой, номером строки, названием метода и так далее.
Например, если внутри basicConfig указать:
То вывод ошибки будет выглядеть так:
Вы можете сами выбирать, какую информацию включить в лог, а какую оставить. По умолчанию формат такой:
Важно помнить, что все параметры logging.basicConfig должны передаваться до первого вызова функций логирования.
Эпилог
Вместо заключения просто оставим здесь рабочий кусочек кода, который можно использовать 🙂
Если хотите разобраться с параметрами более подробно, Вам поможет официальная документация (очень неплохая, кстати).
Часто вижу, что помимо обработки исключений, люди мучаются кое с чем еще, а именно с логированием.
Большинство людей не знают, что писать в логи, поэтому решают логировать все, что угодно, думая, что все подряд – это в любом случае лучше, чем ничего, и, в конечном итоге, просто создают шум. А шум – это информация, которая никак не помогает вашей команде понять, в чем дело и как решить проблему.
Более того, я не думаю, что эти люди могут уверенно пользоваться уровнями логирования, поэтому используют по умолчанию logger.info везде (если не пишут print ).
Наконец, люди, похоже, не знают, как сконфигурировать логирование в Python, понятия не имеют, что такое обработчики, фильтры, методы форматирования (форматтеры) и т.д.
Цель этой статьи – разъяснить, что такое логирование и как вы должны его реализовывать. Я постараюсь привести содержательные примеры и обеспечить вас гибкими эмпирическими приемами, которые следует использовать при логировании в любом приложении, которое вы когда-либо будете создавать.
Введение
Примеры облегчают визуальное восприятие, поэтому мы будем рассматривать следующую систему:
Пользователи могут подключать несколько интеграций к ресурсам (например, GitHub, Slack, AWS и т.д.)
Ресурсы уникальны в зависимости от интеграции (например, репозитории списков с GitHub, диалоги из Slack, экземпляры списков EC2 из AWS и т.д.)
Каждая интеграция уникальна, имеет свой набор сложностей, конечных точек, шагов и т.д.
Каждая интеграция может привести к различным ошибкам, которые могут возникнуть в любое время (например, неверная аутентификация, ресурс не существует и т.д.)
Я не буду сосредотачиваться на проблемах поддержки таких интеграций, просто пронаблюдаем за тем, как это работает.
Природа логирования: хорошее логирование имеет значение
Для начала давайте проанализируем характеристики логов.
«Наглядными» мы их называем потому, что они предоставляют вам какую-то информацию, «контекстными», потому что они дают вам общее представление о том, как обстоят дела на данный момент времени. И наконец, «реактивными» они являются потому, что они позволяют вам предпринимать действия только после того, как что-то произошло (даже если ваши логи отправляются/получаются в режиме реального времени, на самом деле вы не можете изменить то, что произошло только что).
Если вы не будете учитывать природу логов, то будете производить только шум, что снизит вашу производительность.
Дальше я приведу несколько примеров, основанных на системе, которую мы определили выше:
Если вы зададите описание, к примеру «operation connect failed», но не добавите контекст, трудно будет понять, какая из интеграций не отработала, кто пострадал, на каком этапе подключения произошел сбой, поэтому и среагировать вы не можете. В конечном итоге вы будете копаться в тонне логов без малейшего представления о том, где может быть проблема.
Логи – это конфиденциальная информация из вашего программного обеспечения, нужная чтобы вы оставались в курсе происходящего и могли реагировать на ситуации. Любые логи, которые не дают вам такой информации – это шум.
Когда нужно логировать?
Чтобы логи оставались реактивными, вам нужно логировать «события». Сделайте их такими же понятными и удобными для чтения, как эта статья. Возможно, вы не прочитали каждую строку, которую я написал выше, но вы все равно можете продолжить дальше, пропустить ненужные разделы и сосредоточиться на том, что привлекло ваше внимание. Логи должны быть такими же.
Есть эмпирическое правило построение логов:
В начале соответствующих операций или потоков (например, при подключении к сторонним сервисам и т.д.);
При любом достигнутом прогрессе (например, успешная аутентификация, получен валидный код ответа и т.д.);
При завершении операции (успешном или неудачном).
Логи должны рассказывать вам историю, у каждой истории есть начало, середина и конец.
Будьте осторожны с релевантностью, добавлять логи проще, чем удалять их, ведь все, что нерелевантно – шум.
Что логировать?
Чтобы логи были наглядными и контекстными, нужно предоставлять правильный набор информации, и я не могу сказать, какая информация будет являться таковой, не зная вашего случая. Давайте вместо этого воспользуемся нашим примером.
Хороший пример логов
Началась операция с 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 .
Для описанной системы/потоков, я бы использовал уровни логов, как определено:
WARNING – недостаточно веская причина для остановки потока, однако это предупреждение на будущее, если возникнет какая-то проблема.
CRITICAL – самый тревожный предупреждающий лог, который вы когда-либо получите. По сути, он должен быть той самой причиной встать в три часа ночи и пойти что-то чинить.
Для этих случаев мы рассмотрим:
Для AWS: если какой-то регион AWS недоступен, мы можем предположить, что у пользователя там нет никаких ресурсов, поэтому можно двигаться дальше.
Для Slack: если OAuth завершится неудачно из-за невалидного id клиента, значит остальные пользователи столкнутся с той же проблемой, интеграция не отработает, пока мы вручную не сгенерируем новый id. Это дело кажется достаточно критичным.
Да, я считаю, что логи DEBUG нужно использовать на продакшене.
Другой вариант – включить дебаг после того, как странная ошибка потребует более детального разбирательства.
Простите, но для меня такой вариант недопустим.
В реальном мире клиентам нужна быстрая реакция, командам нужно выполнять свою работу и постоянно поддерживать системы в рабочем состоянии. У меня нет времени и пропускной способности для нового деплоя или включения флага и ожидания повторения проблемы. Я должен реагировать на неожиданные проблемы в считанные секунды, а не минуты.
Правильно настройте логгер
Еще я замечаю, что люди испытывают трудности при настройке логгера (или вообще его не настраивают). Конечно, документация в Python не очень дружелюбная, но это не оправдание, чтобы вообще ее не трогать.
Использование ручных команд непросто поддерживать и понимать;
fileConfig – негибкая история, у вас не бывает динамических значений (без дополнительных фокусов);
dictConfig – простая история в запуске и настройке.
Я поделюсь несколькими советами и определениями, которые вам надо знать, а затем мы создадим окончательную конфигурацию на реальных примерах из проектов, над которыми я работаю.
Вот кусочек того, о чем мы будем говорить дальше:
Что такое логгеры?
В любом случае, придерживайтесь:
Форматируйте логи
Когда я работал в Zak (бывшем Mimic), и даже сегодня в Lumos мы форматировали логи как JSON. Он является хорошим стандартом для систем, работающих на продакшене, поскольку содержит множество атрибутов. Проще визуализировать JSON, чем обычную длинную строку, и для этого вам не нужно создавать свой собственный форматтер (ознакомьтесь с python-json-logger).
Для локальной разработки я рекомендую использовать форматирование по умолчанию для простоты.
Ваше решение будет зависеть от вида проекта. Для Tryceratops я решил использовать обычный форматтер, поскольку он проще и работает локально, там нет нужды в JSON.
Фильтруйте логи
Фильтры можно использовать либо для фильтрации логов (внезапно), либо для добавления дополнительного контекста в запись лога. Рассматривайте фильтры, как хуки, вызываемые до обработки итогового лога.
Их можно определить следующим образом:
Или их можно добавить прямо в логгер или обработчик для упрощения фильтрации по уровням (скоро будут примеры).
Обрабатывайте логи и то, как все связано
Обработчики представляют из себя комбинации форматтеров, выходных данных (потоков) и фильтров.
С ними вы можете создавать следующие комбинации:
Выводить все логи из info (фильтр), а потом выводить JSON в консоль.
Наконец логгеры указывают обработчикам.
Теперь, когда вы понимаете, что делают все эти объекты, давайте писать собственные! Как всегда, я постараюсь показать вам примеры из реальной жизни. Я буду использовать конфигурацию Tryceratops. Вы можете открыть ссылку и посмотреть самостоятельно окончательную конфигурацию.
Шаблон конфигурации логирования
Начнем с такого каркаса, создадим константу LOGGING_CONFIG :
Version всегда будет 1. Это плейсхолдер для возможных следующих релизов. На данный момент версия всего одна.
Я рекомендую оставить значение disable_existing_loggers в False, чтобы ваша система не поглощала другие неожиданные проблемы, которые могут возникнуть. Если вы хотите изменить другие логгеры, я бы порекомендовал их явно переписать (хоть это и скучно).
Корневой логгер можно определить тремя разными способами, что сбивает с толку:
Выбирайте любой! Мне нравится оставлять его снаружи, поскольку так он выглядит очевиднее и подробнее говорит о том, чего я хочу, ведь корневой логгер влияет на все другие определенные логгеры.
Конфигурация логирования: форматтеры
Я дополню пример из Tryceratops примером с JSON из Lumos.
Конфигурация логирования: обработчики
Конфигурация логирования: логгеры и root
Давайте разберемся, что происходит:
Кроме того, обратите внимание, что я могу переписать правила по умолчанию. Через настройки или позже динамически. Например, каждый раз, когда triceratops получает подобный флаг от CLI, он обновляет конфигурацию logging чтобы включить дебаг.
Логирование – это важно, но наличие хорошо структурированных исключений и блоков try/except также важно, поэтому вы можете также прочитать, как профессионально обрабатывать и структурировать исключения в Python.
Файл лога (от англ. log — журнал событий, протокол) имеет разрешение *.log, начинает записываться сразу после запуска клиента игры и прекращает записываться после закрытия игрового клиента.
Файл дампа (от англ. dump) имеет разрешение *.dmp и содержит информацию о критической ошибке, произошедшей в клиенте игры. Его запись производится автоматически, когда игровой процесс завершается критической ошибкой.
Файлы логов и дампов хранятся в папке logs, которая находится в системном разделе жёсткого диска.
Дата в названии файлов лога и дампов записывается в следующем формате: ГОД МЕСЯЦ ДЕНЬ_ЧАСЫ МИНУТЫ СЕКУНДЫ.
Для Windows XP расположение следующее:
Для Windows Vista, Windows 7, Windows 8 расположение следующее:
Папка Application Data, или AppData, по умолчанию скрыта. Без редактирования параметров отображения папок в операционной системе её можно открыть следующим образом:
Кроме того, вы можете попасть в папку logs, запустив файл ToLogs.cmd, который находится в корневой папке с клиентом игры.
В данном случае нам необходимы следующие файлы:
Находим нужные файлы в папке logs (её расположение указано выше):
В приведённом примере лог (файл событий клиента игры) был создан 23 июня 2013 года в 18 часов 48 минут 10 секунд. Файлу дампа присваивается имя, идентичное файлу лога, поэтому названия обоих файлов (лога и дампа) будут одинаковыми.
Размер файла, прикрепляемого к заявке, не должен превышать 800 КБ. В некоторых случаях файл лога может превышать лимит, поэтому его необходимо упаковать в zip-архив.
что делать?
все это последствия установки модов.
Я говорю на 3 языках: ирония, сарказм, ненормативная лексика.
Уровень сарказма в моем ответе зависит от уровня тупости вашего вопроса.
3) Вместо вентиля стаб.
А если по теме то советую снести клиент и установить заново, было подобное у меня помогла только так.
Зачем нужна очистка кэша World of Tanks?
Как и любая другая информация, кеш в детище Wargaming занимает место. Чем дольше вы играете в танки, тем больше данных там накапливается. При каждой загрузке клиента идёт считывание кэша, что может тормозить производительность, так как вся эта информация забивает лишнюю память.
При этом даже после полного удаления или обновления Мира Танков кеш никуда не денется и останется там пока вы сами его вручную не ликвидируете. Это и объясняет тот факт, что пароль и логин сохраняются даже при переустановке игры (если включена опция «запомнить меня»).
Так же есть версия о том, что чистка кеша может повлиять на статистику, но это для суеверных.
Раскопки лога питона [WoT]
Вот что значит высосанная из пальца теория. Файлы клиента просто лежат на жестком диске и с ними ничего не будет происходить если не будут отправляться команды, т.к. в танках все расчеты происходят на сервере, то вполне логично, что он шлёт данные клиенту какую карту грузить. Ты по логу никак не узнаешь выбрана карта рандомно или это заговор какой-то. В любом случае, сервер отправит инфу клиенту о том, что такую-то карту надо выгрузить в оперативку. А так как кроме текстурки карты ещё есть миникарта, превью карты, иконки союзной и противоположной баз, то естественно, что и на отображение всей этой информации тоже отдается команда.
Чистим кэш WoT
Как удалить логи питона в папке wot. Как не забаниться в World of Tanks используя читерские моды. Как почистить кэш игры Ворлд оф Танк
Пробовал права администратора? Устанавливал по инструкции? Умеешь устанавливать игры? Сколько лет?
Означает что windows 64 или 84 бита
У меня на ноуте вообще 32 а на стационарке 64
Мне пох*й. Смысл именно такой.
Эта фраза из книги Стивена Кинга «Бессоница». Смысл этой фразы понятен из этого обзаца:
Ральф внезапно вспомнил любимую фразу Кэролайн, обычно произносимую ею,
когда он, вздыхая и охая, не хотел браться за какое-нибудь дело, не желал
признавать допущенную ошибку либо увиливал от обязательного звонка: «Тернист
и долог путь в Эдем, любимый, так стоит ли стенать по пустякам?»
Быть пропитанным бытом, но продолжать бороться за счастье и быть сильным. Жить в собственном ритме, не претендуя на особую роль в мировой культуре, политике, музыке. Знать своё место, быть ответственным и порядочным, и только иногда позволяя себе лишнее.
П.С. Один человек может быть простым только для простого. Сложный и всесторонний разглядывает в песчинке целую экосистему.
м, дополнительный вопрос на твои интеллектуальные способности?
у нас так обычно учитель истории говорит, чтобы оценку повыше поднять тому, кто отвечает
Добрый день дорогие пользователи сайт
В данной теме я напишу основную защиту, чтобы картошка вас не забанила при использовании читов. Тема будет обновляемая.
Зайдите в папку World of Tanks и создайте ярлык файла WorldOfTanks.exe Запускайте игру только через него. Потому что появилась информация, что лаунчер ВоТ так же передает некоторые сведения о сторонних внедрениях в игру.
Нажмите, чтобы раскрыть.
Нажмите, чтобы раскрыть.
Ребята, не играйте в футбольном режиме.
Нажмите, чтобы раскрыть.
Дополню,делаем пустышки в логах или скажем нет логам в танках
Удаляем логи и создаем пустую папку с таким же названием
А также в папке LOGS делаем тоже самое
Для примера добавлю архив с готовыми пустыми папками,
Пожалуйста Войдите или Зарегестрируйтесь чтобы видеть ссылки.
Для копирования пустых папок удалить файлы в ручную по пути X / Games / World_ of_ Tanks файл python.log
В папке World_ of_ Tanks/ LOGS удалить файлы:
AutoUpdateSelector.log.bak
Informer.log
WargamingGameUpdater.log
Нажмите, чтобы раскрыть.
Добавлено 12.12.2016
Друзья, не используйте автовыстрел в аимботах. В идеале вообще не используйте аимбот.
Нажмите, чтобы раскрыть.
Инструкция как не забанится от
После установки клиента делаем следущее;
1. Удаляем файл в корневой папке Python.log.
2. Очищаем (удаляем) все что ест в папке Logs
3. Создаем папку! с названием Python.log. в корневую папку и делаем атрибут только для чтения(правой кнопкой мыши-свойства папки-только чтение).
4.Создаем папки AutoUpdateSelector.log.bak Informer.log WargamingGameUpdater.log в папку logs и делаем тоже самое (атрибут только для чтения(правой кнопкой мыши-свойства папки-только чтение)).
5.Папку replays тоже самоеатрибут только для чтения (правой кнопкой мыши-свойства папки-только чтение) (в клиенте игры ставим нет на галочке запись боя).
6. Создаем ярлык папки replays на рабочий стол. Далее открываем папку с ярлыка и делаем вид эскиза. Если каким то образом будет все таки записан хоть один реплей вы сразу увидите и естественно удалите.
7.Чистим все логи в корневой папки файлов WoTLauncher.cfg WoTLauncher.log и xvm.log да да! я его не устанавливал и даже от него но каким то чудом появился. Короче открываем файлик по очереди-выделить все-удалить-так же ставим атрибут для чтение.
Теперь Ваши действия записыватся не где не будут.
PS Набираем команду в комндной строке-пуск-regedit-b вводим World_of_tanks Battle Replay поиск либо даст результат либо нет. У меня дал. Просто удаляем значение реестра(правой кнопкой удалить).
II) Дальше косательно установке любых модов. Как бы Вам не хотелось но любые моды собирают информацию какие моды установлены и она может попасть не туда куда нужно.
1)Открываем папку res_mods номер патча(0.9.18.0) и сразу удаляем папку install mods. У разных мододелов она может называтся по разному(Download) но смысл остается один. В эту папку закачиватся логи установленых модов и сами моды и распаковываются. амое интересное что установочный моды с логами автоматом не удаляются. А остаются. Удаляем целиком папку не щадя ничего.
2)Не в коем случае(конечно если очень надо) не ставим моды на основе статистике XVM.В итоге я нашел папки которые и не устанавливал и находил скрытые папки моего захода и т д. Решение-Правая верхняя строчка поиск-компьютер забиваем XVM и все что он находит удаляем не стесняясь.
III. Ну и касательно автоприцелов и ЗМ. Чтобы безбязнено пользоватся автоприцелом надо убирать по максимальному с экрана.
Нажмите, чтобы раскрыть.
Удачи на полях сражения дорогие читеры.
Что такое кеш WOT и зачем его чистить?
Относительно WOT, в кеше хранятся такие данные как:
Как почистить кэш игры Ворлд оф Танк?
Для этого сперва нужно найти папку, в которой он хранится:
По умолчанию это скрытый системный путь, поэтому надо открыть отображение скрытых папок и файлов в настройках проводника Винды. Если не знаете как это делать или искать папку вручную нет желания, можно сделать это полуавтоматически:
В указанной папке вы увидите следующее содержимое:
rmdir /S /Q «%appdata%\wargaming.net\WorldOfTanks\custom_data»
Для безопасного решения проблем с игрой можно сделать следующее:
Надеюсь эта статья оказалась для Вас полезной.
Как это ни странно, но многие до сих пор не знают как правильно почистить кэш WoT. Предположим у Вас часто вылетает клиент во время загрузки, или сломался какой то мод, то и дело глючит ангар и от многих напастей поможет чистка кэша.
Кэш Wot, что же это такое? А все просто, в папке кэша хранятся все ваши настройки клиента, то как настройки графики, настройки логина, настройки XVM (если используете этот мод), да чего там только не хранится. И банальный пример, обновили вы мод ангара, а в кэше записаны старые настройки ангара(сейчас речь идет не о полной переустановке клиента и установке ангара), заходите в игру и … а что и… и ни чего не видите, ни карусели танков, ни кнопки «в бой» только чистый и пустой ангар с единственным танком стоящим в вашей карусели первым. Кому знакома такая ситуация, сейчас просто улыбнулись, вспоминая тот неописуемый ужас, который вселяется в любого «танкиста» при виде такого зрелища =) Тут то и поможет очистка кэша игры World of Tanks.
В стандартной библиотеке Python есть замечательный пакет для логирования — logging. В сети бытует мнение, что он сложный и настраивать его сплошная боль. В этой статье я попробую убедить вас в обратном. Мы разберём что из себя представляет этот пакет, изучим основные компоненты и закрепим материал практическим примером.
Зачем нужны логи?
logging и Python
Точкой входа в работу с логированием в Python является библиотека logging. На первый взгляд может показаться, что библиотека сложная и запутанная, но потратив некоторое время на её изучение, можно убедиться в обратном. Для меня logging это классический пример дизайна ООП, где композиция преобладает над наследованием, поэтому в исходном коде библиотеки можно встретить множество функциональных классов. Цель этого туториала разобрать по косточкам каждый класс и воссоединить их в единый механизм логирования в Python. Начнём-с.
Logger
Чтобы начать работу с logging необходимо в импортировать библиотеку logging и вызвать функцию getLogger, передав ей имя будущего логера. Функция вернёт инстанс объекта Logger. Логер это рычаг за который мы дёргаем каждый раз, когда нам нужно записать информацию в лог.
Handler
Это далеко не полный список. Чтобы посмотреть все, перейдите по ссылке выше. Для указания Handler, необходимо у инстанса Logger вызвать метод addHandler и передать туда инстанс класса Handler. У одного Logger инстанса может быть множество обработчиков.
Пример записи лога в stdout:
Наверняка вы обратили внимание, что лог содержит всего лишь переданную строку. Как сделать так, чтобы в логе была информация об уровне лога, времени записи?
Formatter
Обратите внимание на строку, которую я передал при инициализации инстанса Formatter :
Filter
Наглядно и понятно, разве logging может быть сложным? 😎
LoggerAdapter
Адаптер нужен для передачи дополнительной контекстной информации при каждой записи лога через Logger. Например, вы написали веб-приложение и вам необходимо в логи дополнительно передавать username пользователя:
extra и не только
Теперь вывод значения ключа response можно указать через Formatter (при условии, что response передаётся всегда):
Аргумент extra удобен при написании своих кастомных обработчиков логов (например, отсылка логов в телеграм). Далее я покажу пример кастомного Handler класса для отправки логов в Telegram через бота.
Конфигурация logging
Официальная документация рекомендует конфигурировать logging через python-словарь. Для этого необходимо вызвать функцию logging.config.dictConfig и передать ей специальный словарь. Схема словаря описана здесь. Я лишь вкратце пробегусь по основным ключам:
Ранее все настройки я задавал кодом через вызов методов. Это может быть удобно, если у вас 1 модуль, но когда таких модулей становится множество, то в каждом из них задавать общие настройки кажется излишним занятием. Давайте попробуем все настройки задать в одном месте:
Неправда ли удобно? В реальных приложениях настройки выносят в отдельный модуль, который обязательно импортируется на старте, например, модуль в settings.py как в Django. Именно в нём задаются глобальные настройки для всех логеров приложения.
Наследование в logging
Отправляем логи в Telegram
Чтобы создать свой обработчик, необходимо наследоваться от класса Handler и перезаписать метод emit :
Чтобы обработчик начал свою работу, достаточно в настройках вашего логера прописать новый обработчик:
Заключение
В этой статье я постарался вкратце рассказать и показать основные сущности библиотеки logging, а также продемонстрировать гибкий механизм логирования в python. Надеюсь мне это удалось, и статья оказалась для вас полезной.