如何使用python日志记录模块在dictConfig文件中设置自定义日志记录处理程序

时间:2019-09-16 20:32:04

标签: python heroku logging

我是开发中的新蜜蜂,面临下一个问题。
我编写了一个自定义日志记录处理程序,并将其保存到单独的模块中。我尝试将此处理程序设置为dictConfig中的处理程序类,并且可以在localhost上正常运行,但是当我在Heroku上运行它时,它会引发ValueError并显示消息“ 无法配置处理程序'send_to_telegram_handler':'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)

# 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'
        },
    }
}

我想问题出在使用自定义类作为日志记录处理程序,但是不明白为什么它可以在localhost而不是在Heroku上工作

1 个答案:

答案 0 :(得分:0)

Heroku上的config-vars中的TELEGRAM_BOT_TOKEN密钥名有误。这样,问题就解决了。