У меня есть пакет Python, который я распространяю как один исполняемый файл с помощью PyInstaller.Пользовательский обработчик регистрации и форматирование с PyInstaller
Я использую модуль logging
в сочетании с конфигурацией на основе файлов. Для реализации централизованного облачного ведения журнала я решил использовать модули loggly-python-handler и python-json-logger для отправки информации журнала в loggly. Последнее преобразует сообщение журнала в JSON, первое отправляет сообщение журнала (JSON) в Loggly, используя вызов HTTP (S).
Отрывок из моей конфигурации протоколирования (фактическое TOKEN
значение было удалено, конечно):
[handler_loggly]
class=loggly.handlers.HTTPSHandler
formatter=json
args=('https://logs-01.loggly.com/inputs/TOKEN/tag/test','POST')
level=CRITICAL
[formatter_json]
format= %(name)s %(asctime)s %(filename)s %(created)f %(funcName)s %(levelno)s %(lineno)d %(msecs)d %(levelname)s %(message)s
class=pythonjsonlogger.jsonlogger.JsonFormatter
Это прекрасно работает при его запуске на компьютере, где установлен Python (и необходимые библиотеки). Тем не менее, исполняемый файл, созданный PyInstaller, по-видимому, не содержит необходимых модулей регистрации (поскольку они не импортируются нигде в исходном коде, просто упоминаются в конфигурации ведения журнала).
выход Ошибка при запуске исполняемого файла:
Traceback (most recent call last):
File "c:\python35\lib\logging\config.py", line 98, in _resolve
AttributeError: module 'pythonjsonlogger' has no attribute 'jsonlogger'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 64, in <module>
File "<string>", line 41, in main
File "<string>", line 28, in init_logger
File "c:\python35\lib\logging\config.py", line 76, in fileConfig
File "c:\python35\lib\logging\config.py", line 123, in _create_formatters
File "c:\python35\lib\logging\config.py", line 100, in _resolve
ImportError: No module named 'pythonjsonlogger.jsonlogger'
main returned -1
Покушение 1
Я попытался с помощью PyInstaller-х hidden import functionality ссылаться на оба модуля: выходной файл
pyinstaller \
--log-level=DEBUG \
--onefile \
--hidden-import=loggly \
--hidden-import=pythonjsonlogger main.py
Log:
3463 DEBUG: Hidden import: loggly
3463 INFO: Analyzing hidden import 'loggly'
3463 DEBUG: Hidden import: pythonjsonlogger
3478 INFO: Analyzing hidden import 'pythonjsonlogger'
Покушение 2
Пробовал указать импорт в спецификации файле PyInstaller (в отрывок ниже):
a = Analysis(['main.py'],
pathex=['C:\\Dev\\pyWebiExport'],
binaries=None,
datas=None,
hiddenimports=['loggly.handlers.*', 'pythonjsonlogger.jsonlogger.*'],
hookspath=None,
…
Log выходного файла:
3510 DEBUG: Hidden import: loggly.handlers.*
3510 INFO: Analyzing hidden import 'loggly.handlers.*'
5694 ERROR: Hidden import 'loggly.handlers.*' not found
5694 DEBUG: Hidden import: pythonjsonlogger.jsonlogger.*
5694 INFO: Analyzing hidden import 'pythonjsonlogger.jsonlogger.*'
5709 ERROR: Hidden import 'pythonjsonlogger.jsonlogger.*' not found
Версия информация:
- Python 3.5.1 (Windows, x86)
- PyInstaller 3.0
- Python-JSON-регистратор (0.1.4)
- loggly-Python-обработчик (1.0.0)