- Python правильный поиск и чтение windows журналов событий приложений
- 1 ответ
- Похожие вопросы:
- Основные концепции журналирования в Python
- Основные концепции журналирования на Python
- Уровни журналирования
- Форматирование журналов
- Обработчик журналирования
- Диспетчер журналирования
- Практические советы
- Чтение журнала событий windows в Python с помощью pywin32 (модуль win32evtlog)
- 1 ответ
- Похожие вопросы:
Python правильный поиск и чтение windows журналов событий приложений
поэтому моя конечная цель — использовать python для чтения журнала событий windows конкретного приложения при запуске обновления файла.
Вот моя проблема, python я считаю, что не имеет доступа к журналам событий, хранящимся в C:\Windows\System32\winevt\Logs. Всякий раз, когда я пытаюсь прочитать файлы, я получаю следующую ошибку:
Я перепробовал все формы экранирования, разделения строк/объединения и использования кавычек в пути к файлу, и я всегда получаю одну и ту же ошибку. Я даже дешево использовал команду os.system(‘dir «C:\Windows\System32. «‘) в командной строке python, чтобы перечислить каталоги выше по пути к журналу для проверки доступа, и я получаю аналогичные ошибки вплоть до каталога C:\Windows\System32, который будет перечисляться просто отлично.
Я знаю, что эти каталоги существуют. Поэтому я решил, что могу использовать сценарий bash для копирования журнала событий во временную папку для чтения python. Я написал очень простой скрипт bash, содержащий:
(XXXXXXX) — это имя журнала, который я хочу скопировать для сценария python.
Скрипт bash прекрасно работает сам по себе, но при вызове моим скриптом python он терпит неудачу, отказывается копировать файл, потому что не может его найти. Я даже пробовал использовать py2exe для создания exe, чтобы затем запустить его в режиме администратора. Это тоже не удалось. С подобными ошибками файла не найдено. Я не уверен, что понимаю, какие разрешения использует python для вызова скрипта и почему скрипт bash не может скопировать файл, даже если он может сделать это в обычной командной строке.
Любые предложения или недостатки, которые вы можете указать в моей логике, были бы великолепны. Я очень застрял.
1 ответ
Я пытаюсь заставить .NET Remoting работать на Windows Azure с веб-ролью. Я получаю 500 внутренних ошибок сервера при попытке получить доступ к URL. Я пробовал использовать Azure MMC ( http:/ / code.msdn.microsoft.com/windowsazuremmc ), но я могу получить только журналы инфраструктуры. Никаких.
Есть ли какой-нибудь способ получить журналы приложений и служб из средства просмотра событий с помощью c#? Я мог бы читать журналы из журналов windows, но не из журналов приложений и служб. Именно то, что мне нужно, — это прочитать журнал с именем Microsoft-Windows-PrintService/Operational.
Вы используете 32-битный python на 64-битной установке windows.
В большинстве случаев, когда 32-разрядное приложение пытается получить доступ к %windir%\System32,, доступ перенаправляется на %windir%\SysWOW64
Вы можете использовать os. listdir («c:\windows\sysnative\winevt\logs») в качестве обходного пути для чтения из реального system32 dir из 32-битного интерпретатора python, работающего на 64-битном windows.
Похожие вопросы:
Я надеюсь получить некоторые окончательные ответы на этот великий вопрос. При написании веб-приложений в .net следует ли использовать функцию добавления в журнал доступа IIS для хранения того, что.
Я пытаюсь получить список журналов событий special в C#,, таких как журнал Microsoft\Windows\Audio\CaptureMonitor и все другие подобные ему. Они, кажется, не возвращаются, когда я использую.
Я опробовал одну функциональность BizTalk по ссылке ниже https:/ / masteringbiztalkserver.wordpress.com / категория / трубопроводы / До сих пор мне никогда не приходилось заходить в журнал событий.
Я пытаюсь заставить .NET Remoting работать на Windows Azure с веб-ролью. Я получаю 500 внутренних ошибок сервера при попытке получить доступ к URL. Я пробовал использовать Azure MMC ( http:/ /.
Есть ли какой-нибудь способ получить журналы приложений и служб из средства просмотра событий с помощью c#? Я мог бы читать журналы из журналов windows, но не из журналов приложений и служб. Именно.
У меня есть следующее требование Чтение журналов событий удаленных машин Передача учетных данных Разрешить пользователю просматривать эту страницу в приложении MVC Из моих исследований я считаю, что.
У меня есть некоторые VMs, работающие на Azure сервисе. Я хотел бы перенаправить журналы из них (журналы событий Windows и журналы MS SQL server) в определенный концентратор журналов (например.
Чтение и запись журналов приложений обсуждается разница между журналами запросов и журналами приложений . В main.py , работающем на App Engine, я импортирую logging и хватаю регистратор (поскольку.
Существует ли какой-либо пакет npm, который считывает журналы событий удаленной системы windows? Я сделал быстрый поиск вдоль npmjs.org, но не смог найти ничего подходящего. Любая помощь будет.
То, что я пытаюсь сделать, — это приложение C#, которое будет читать журналы из журналов событий Windows и хранить их где-то еще. Это должно быть быстро, так как некоторые устройства, где он будет.
Основные концепции журналирования в Python
По мере того, как усложняется структура приложения, ведение логов (журналирование) становится всё полезнее для разработчика. Логи не только пригодятся в процессе отладки, но и помогут обнаружить скрытые проблемы проекта, а также отследить его производительность.
Модуль logging, входящий в состав стандартной библиотеки Python, предоставляет большую часть необходимых для журналирования функций. Если его правильно настроить, записи лога могут предоставить большое количество полезной информации о работе приложения: в каком месте кода была сформирована запись, какие потоки и процессы были запущены, каково состояние памяти.
Данный материал — руководство для начинающих разработчиков.
Ростелеком информационные технологии , Москва , По итогам собеседования
Обратите внимание, что весь размещённый в статье код подразумевает, что вы уже импортировали модуль:
Основные концепции журналирования на Python
В данном разделе рассмотрим уровни журналирования, форматирование журналов, обработчики и диспетчер журналирования.
Уровни журналирования
Уровни журналирования соотносятся с важностью лога: запись об ошибке должна быть важнее предупреждения, а отладочный журнал должен быть полезен только при отладке приложения.
В Python существует шесть уровней лога. Каждому уровню присвоено целое число, указывающее на важность лога: NOTSET=0, DEBUG=10 , INFO=20 , WARN=30 , ERROR=40 и CRITICAL=50 .
Все уровни последовательно упорядочены ( DEBUG INFO WARN ), кроме NOTSET , который мы отдельно разберём далее.
Форматирование журналов
Форматирование журналов дополняет сообщения контекстной информацией. Это помогает установить, когда была создана запись, из какого участка приложения (файл, строка, метод и т. п.), а также поток и процесс, что может оказаться полезным при отладке многопоточных проектов.
Например, при форматировании записи «hello world»:
в логе она отобразится таким образом:
Обработчик журналирования
Обработчик журналов — это компонент, который записывает и отображает логи. Например, StreamHandler выводит записи на консоль, FileHandler — в файл, SMTPHandler отправляет на электронную почту.
В каждом обработчике есть два важных поля:
- Форматер, добавляющий в лог контекстную информацию.
- Уровень лога, который отфильтровывает журналы низшего уровня. Обработчик уровня INFO не будет работать с журналами уровня DEBUG.
Стандартная библиотека содержит обработчики, которых в большинстве случаев должно быть достаточно. Самые распространённые — StreamHandler и FileHandler .
Диспетчер журналирования
Вероятно, диспетчер журналирования — то, что используется в коде чаще всего, и в то же время является источником наибольших трудностей. Новый диспетчер журналирования можно создать следующим образом:
В диспетчере три основных поля.
- Распространение. Определяет, должен ли лог обрабатываться родительским диспетчером (по умолчанию эта функция активна).
- Уровень. Как и в обработчике, уровень отфильтровывает менее важные журналы. Отличие заключается в том, что уровень проверяется только в дочерних диспетчерах, при распространении вверх уровень не учитывается.
- Список обработчиков, в которые направляется попавшая в диспетчер запись. Он позволяет гибко настраивать обработку записей. К примеру, можно создать обработчик, записывающий всё с уровнем DEBUG , и обработчик для электронной почты, работающий только с уровнем CRITICAL . Взаимоотношения диспетчера с обработчиками строятся по принципу издатель-потребитель. Запись передаётся всем обработчикам, как только пройдёт проверку уровня в диспетчере.
Имя диспетчера уникально, таким образом, если диспетчер с именем «toto» уже создан, последующие вызовы logging.getLogger(«toto») будут возвращать один и тот же объект.
Как можно догадаться, диспетчеры выстраиваются в соответствии с иерархией. На вершине находится корневой диспетчер, получить доступ к которому можно с помощью logging.root() . Он вызывается при использовании методов, подобных logging.debug() . По умолчанию корневому журналу присваивается уровень WARN , поэтому каждый журнал с меньшим уровнем (например logging.info(«info») ) игнорируется. Кроме того, обработчик по умолчанию для корневого диспетчера создаётся автоматически, когда добавляется первая запись в журнал уровня выше WARN . Не рекомендуется обращаться к корневому диспетчеру прямо или косвенно с помощью методов, подобных logging.debug() .
При создании нового диспетчера в качестве родительского будет установлен корневой.
Диспетчер использует «запись с точкой», то есть объект с именем «a.b» будет дочерним по отношению к «a». Однако это правило действительно только при существовании «a», иначе родительским всё равно будет корневой диспетчер.
Когда диспетчер определяет, что запись проходит фильтр по уровню (если уровень лога ниже уровня диспетчера, запись игнорируется), применяется не действительный, а эффективный уровень. Эффективный уровень обычно равен уровню диспетчера, однако при этом уровень NOTSET является исключением. В таком случае эффективный уровень будет равен уровню первого диспетчера, расположенного выше в вертикали наследования, уровень которого не равен NOTSET .
По умолчанию уровень нового диспетчера NOTSET , и, поскольку уровень корневого равен WARN , то и эффективный уровень нового будет WARN . Таким образом, если даже к новому диспетчеру прикреплены обработчики, они не вызываются, если уровень лога не превышает WARN.
Уровень диспетчера используется по умолчанию для пропуска записи, которая будет проигнорирована, если её уровень недостаточно высок.
Практические советы
Модуль журналирования весьма полезен, однако некоторые его особенности могут вызвать головную боль даже у опытных разработчиков. Есть несколько практических советов по применению этого модуля.
- Настроить корневой диспетчер, но не использовать его в коде, к примеру, никогда не вызывать функцию logging.info() , которая скрыто обращается к корневому диспетчеру. Если вы хотите отловить сообщения об ошибках из используемых библиотек, настройте этот диспетчер, например, на запись в файл, чтобы облегчить отладку. По умолчанию сообщения выводятся только в stderr , поэтому журнал легко потерять.
- Для использования журналирования создайте новый диспетчер с помощью logging.getLogger(logger name) . Обратите внимание на валидность имени. Чтобы добавить обработчики, можно использовать метод, возвращающий диспетчер.
После этого можно создать и использовать новый диспетчер:
- Используйте классы RotatingFileHandler, например так, как применён TimedRotatingFileHandler в приведённом выше примере вместо FileHandler. Благодаря этому смена файла журнала будет происходить автоматически при достижении максимального размера или по расписанию.
- Для автоматического отслеживания сообщений об ошибках используйте такие инструменты, как Sentry, Airbrake, Raygun и тому подобные. Особенно это полезно при работе над веб-приложениями, где логи могут быть весьма многословными и ошибки легко теряются в общей массе. Ещё одно преимущество этих инструментов в том, что они отображают значения переменных при обнаружении ошибок. Таким образом можно определить, какой URL или пользователь спровоцировал проблему и тому подобное.
Чтение журнала событий windows в Python с помощью pywin32 (модуль win32evtlog)
Я хотел бы прочитать журнал событий Windows’. Я не уверен, что это лучший способ, но я хотел бы использовать для этого модуль pywin32 -> win32evtlog . Прежде всего, можно ли читать журналы из Windows 7 с помощью этой библиотеки и если да, то как читать события, связанные с запусками приложений (запуск .exe должен оставить trace в журнале событий в windows, я думаю).
Мне удалось найти какой-то маленький пример в сети, но мне этого недостаточно, и документация, к сожалению, написана не очень хорошо ;/
1 ответ
Я ищу, чтобы имитировать нажатия клавиш в python 3.2 в windows 7 для отправки в GUI.I есть python win32 модуль, установленный на моем компьютере. Порядок alt+t+r+name+enter.What был бы лучшим способом отправки этих нажатий клавиш в активное окно?любой пример кода был бы очень полезен. Благодарю.
Я хочу получить все сохраненные журналы событий моей машины windows 8, используя python 3.3 (особенно журналы событий мыши). Я нашел способ получить файл журнала событий с помощью модуля win32evtlog в python. Читая логтип System, я получаю общее число 6594. import win32evtlog hand =.
вы можете найти множество демо-версий, связанных с winapi, в вашей папке C:\PythonXX\Lib\site-packages\win32\Demos . В этой папке вы найдете сценарий с именем eventLogDemo.py . Там вы можете увидеть, как использовать модуль win32evtlog . Просто запустите этот скрипт с eventLogDemo.py -v , и вы получите распечатки из вашего журнала событий Windows с помощью приложения logtype.
На случай если вы не сможете найти этот скрипт:
Я надеюсь, что этот сценарий соответствует вашим потребностям
Похожие вопросы:
Я работаю над получением журнала событий Windows с удаленной машины с помощью Python. Я попробовал следующий код: import win32evtlog server = ‘aRemoteMachineHostName’ logtype = ‘System’ hand =.
Ниже приведен код, он дает общее число 87399 журнала, но при чтении журналов он возвращает только список записей 7. import win32evtlog server = ‘localhost’ logtype = ‘Application’ hand =.
Я работаю над программой, и мне нужно знать, как я буду читать конкретную запись в журнале событий Windows на основе номера записи, который уже будет иметь этот скрипт. Ниже приведен код, с которым.
Я ищу, чтобы имитировать нажатия клавиш в python 3.2 в windows 7 для отправки в GUI.I есть python win32 модуль, установленный на моем компьютере. Порядок alt+t+r+name+enter.What был бы лучшим.
Я хочу получить все сохраненные журналы событий моей машины windows 8, используя python 3.3 (особенно журналы событий мыши). Я нашел способ получить файл журнала событий с помощью модуля win32evtlog.
Я читал пример ,об использовании pywin32 для чтения журнала событий windows : Доступ win32 Python к журналу событий теперь я задаюсь вопросом, Могу ли я сделать следующий шаг : Запустите функцию.
В PowerShell вы можете запустить эту команду, чтобы перечислить все различные папки журнала событий на сервере: Get-EventLog -list Есть ли способ сделать это в Python? Я видел много сообщений о том.
У меня есть приложение, которое использует win32evtlog для получения и отображения различных событий, и я хотел бы ограничить отображение событиями определенного уровня, но win32evtlog не возвращает.
У меня есть простой скрипт python, который будет работать на сервере windows, я хотел бы регистрировать определенные события по всему сценарию в журнале событий windows. У кого-нибудь есть простой и.
Я хочу прочитать некоторые журналы событий, которые находятся под Applications and Services Logs, предпочтительно используя pywin32 -> win32evtlog . Я могу читать журналы событий, которые являются.