#python #python-3.x #logging #discord.py
#python #python-3.x #ведение журнала #discord.py
Вопрос:
Поэтому я решил реализовать ведение журнала в моем discord.py бот, который хорош и хорош и работает нормально. но как только я добавлю ведение журнала в файлы, будь то с помощью обработчика файлов
handler = logging.FileHandler(
filename="../logs/bot.log",
mode="a")
formatter = logging.Formatter("%(asctime)s %(name)-30s %(levelname)-8s %(message)s")
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
logging.getLogger().addHandler(handler)
Или через basicConfig
logging.basicConfig(filename="../logs/bot.log", filemode="a", format="%(asctime)s %(name)-30s %(levelname)-8s %(message)s", level=logging.DEBUG)
Я всегда получаю эту трассировку при выходе
Exception ignored in: <function ClientSession.__del__ at 0x7fe1330b9790>
Traceback (most recent call last):
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/client.py", line 314, in __del__
File "/usr/lib/python3.8/asyncio/base_events.py", line 1740, in call_exception_handler
File "/usr/lib/python3.8/logging/__init__.py", line 1463, in error
File "/usr/lib/python3.8/logging/__init__.py", line 1577, in _log
File "/usr/lib/python3.8/logging/__init__.py", line 1587, in handle
File "/usr/lib/python3.8/logging/__init__.py", line 1649, in callHandlers
File "/usr/lib/python3.8/logging/__init__.py", line 950, in handle
File "/usr/lib/python3.8/logging/__init__.py", line 1182, in emit
File "/usr/lib/python3.8/logging/__init__.py", line 1172, in _open
NameError: name 'open' is not defined
Exception ignored in: <function ClientResponse.__del__ at 0x7fe13300b430>
Traceback (most recent call last):
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 757, in __del__
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 177, in release
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 629, in _release
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/client_proto.py", line 62, in close
File "/usr/lib/python3.8/asyncio/selector_events.py", line 690, in close
File "/usr/lib/python3.8/asyncio/base_events.py", line 719, in call_soon
File "/usr/lib/python3.8/asyncio/base_events.py", line 508, in _check_closed
RuntimeError: Event loop is closed
Я совершенно не понимаю, что произошло не так, поскольку трассировка не включает ни один из моих собственных файлов. Я подозреваю, что мне, возможно, придется выполнить некоторую ручную очистку, но даже если я это сделаю logging.shutdown()
, я получу тот же результат трассировки
Ответ №1:
Это потому, что что-то ( asyncio
в данном случае) пытается войти в систему на этапе завершения работы интерпретатора.
Это известная проблема. Обходной путь для logging
модуля был реализован в python 3.10
Это происходит потому, что имя open
уже было удалено сборщиком мусора до того, как обработчик файлов получил время для его использования.
Вы можете избежать этой проблемы, попытавшись явно закрыть / освободить свои ресурсы перед выходом из программы.
Комментарии:
1. Ну, я попытался сделать это, вызвав logging . shutdown() в atexit, но это не сработало. Кроме этого я ничего не могу сделать?
2. с тех пор @Voreck
logging.shutdown()
уже зарегистрированatexit
. Вам не нужно вызывать его самостоятельно. Вместо этого попробуйте закрыть цикл событий, Соединение и т. Д., Которые есть в вашей программе.