如何使用python日志模块在dictConfig文件中设置自定义日志处理程序
我是开发新手,面临下一个问题。如何使用python日志模块在dictConfig文件中设置自定义日志处理程序,python,heroku,logging,Python,Heroku,Logging,我是开发新手,面临下一个问题。 我编写了一个自定义日志处理程序,并将其保存到单独的模块中。我尝试在dictConfig中将此处理程序设置为处理程序的类,并且它在localhost上正常工作,但当我在Heroku上运行它时,它会引发ValueError,并显示消息“无法配置处理程序‘send_to_telegram_处理程序’:‘NoneType’对象不可设置” 代码如下: # logging_handlers.py import os import logging import telegra
我编写了一个自定义日志处理程序,并将其保存到单独的模块中。我尝试在dictConfig中将此处理程序设置为处理程序的类,并且它在localhost上正常工作,但当我在Heroku上运行它时,它会引发ValueError,并显示消息“无法配置处理程序‘send_to_telegram_处理程序’:‘NoneType’对象不可设置” 代码如下:
# logging_handlers.py
import os
import logging
import telegram
class SendToTelegramHandler(logging.Handler):
def __init__(self):
super().__init__()
self.bot = telegram.Bot(token=os.getenv('TELEGRAM_BOT_TOKEN'))
def emit(self, record):
log_entry = self.format(record)
self.bot.send_message(chat_id=os.getenv('TELEGRAM_CHAT_ID'), text=log_entry)
我想问题在于使用自定义类作为日志处理程序,但我不明白为什么它可以在本地主机上工作,而不能在Heroku上工作。因此,问题已经解决。相关代码提到了
logging\u handler.py
文件名,但配置使用了logging\u handler
。感谢您的注意。评论中有个错误。实际上,文件名是logging\u handlers.py
。我会改正的。除此之外,列出的代码没有问题。你能提供完整的错误跟踪吗?有些东西是None
,但不清楚是什么,可能是telegrame\u BOT\u TOKEN
env var未设置。感谢您向我指出这一点。是的,Heroku上配置变量中的Telegrame\u BOT\u令牌keyname有错误。所以,问题解决了。
# settings.py
import logging_handlers
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
},
'handlers': {
'send_to_telegram_handler': {
'level': 'WARNING',
'formatter': 'standard',
'class': 'logging_handlers.SendToTelegramHandler',
},
},
'loggers': {
'telegram_bot': {
'handlers': ['send_to_telegram_handler'],
'level': 'WARNING'
},
'dialogflow': {
'handlers': ['send_to_telegram_handler'],
'level': 'WARNING'
},
}
}