带有自定义处理程序的Python记录器发送到std
我已经创建了一个带有自定义处理程序的记录器,它通过bot向电报发送消息。它可以工作,但由于某种原因,消息也会被发送到stderr(或stdout) 我的代码:带有自定义处理程序的Python记录器发送到std,python,logging,python-logging,Python,Logging,Python Logging,我已经创建了一个带有自定义处理程序的记录器,它通过bot向电报发送消息。它可以工作,但由于某种原因,消息也会被发送到stderr(或stdout) 我的代码: class TelegramHandler(logging.Handler): def emit(self, record): log_entry = self.format(record) payload = { 'chat_id': TELEGRAM_CHAT_ID,
class TelegramHandler(logging.Handler):
def emit(self, record):
log_entry = self.format(record)
payload = {
'chat_id': TELEGRAM_CHAT_ID,
'text': log_entry,
'parse_mode': 'HTML'
}
return requests.post("https://api.telegram.org/bot{token}/sendMessage".format(token=TELEGRAM_TOKEN),
data=payload).content
# setting up root logger
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.WARNING)
# setting up my logger
logger_bot = logging.getLogger('bot')
handler = TelegramHandler()
logger_bot.addHandler(handler)
logger_bot.setLevel(logging.DEBUG)
以及以下代码:
logger_bot.info('bot test')
logging.warning('root test')
导致
2019-12-06 22:24:14,401 - bot - INFO - bot test # *(plus message in telegram)*
2019-12-06 22:24:14,740 - root - WARNING - root test
我查过了
for h in logger_bot.handlers:
print(h)
只有一个人在场
<TelegramHandler (NOTSET)>
还注意到,当我没有设置根记录器时,bot记录器不会发送到std。所以它们以某种方式连接在一起,但我无法确切了解到底发生了什么
谢谢。您需要将机器人记录器上的属性设置为False
因此,在设置中为日志添加logger\u bot.propagate=False
,这将导致每个日志仅由其自己的处理程序处理