簡體   English   中英

如何使用python日志記錄模塊在dictConfig文件中設置自定義日志記錄處理程序

[英]How to set custom logging handler in dictConfig file using python logging module

我是開發中的newbee,面臨下一個問題。
我編寫了一個自定義日志記錄處理程序,並將其保存到單獨的模塊中。 我嘗試將此處理程序設置為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上工作

Heroku上config-vars中的TELEGRAM_BOT_TOKEN密鑰名有誤。 這樣,問題就解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM