我创建了一个小函数来设置日志记录,使用文件处理程序处理“所有内容”,并使用 smtphandler 处理错误及更高版本。错误日志写入日志文件并正确发送到电子邮件,但 debug、info、notset 不会,即使文件处理程序的 setlevel 设置为 0。为什么?下面的代码
#logsetup.py
import logging
import logging.handlers
def _setup_logger(name, log_file):
"""Function to setup logger"""
logger = logging.getLogger(name)
#Create Formatters
file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
mail_formatter = logging.Formatter('%(name)s - %(message)s')
#Create handler, set formatting, set log level
file_handler_obj = logging.FileHandler(log_file)
file_handler_obj.setFormatter(file_formatter)
file_handler_obj.setLevel(0)
#Create handler, set formatting, set log level
smtp_handler_obj = logging.handlers.SMTPHandler(mailhost=('smtp.gmail.com', 587),
fromaddr='[email protected]',
toaddrs='[email protected]',
subject='Error in Script',
credentials=('[email protected]', 'pwexample'), #username, password
secure=())
smtp_handler_obj.setFormatter(mail_formatter)
smtp_handler_obj.setLevel(logging.ERROR)
# add the handlers to logger
logger.addHandler(smtp_handler_obj)
logger.addHandler(file_handler_obj)
return logger
#mytest.py
import time
import logsetup
if __name__ == '__main__':
TEST_SETTINGS = config_funcs._get_config('TEST_SETTINGS')
logtime = time.strftime('%Y%m%d') # -%H%M%S")
log = logsetup._setup_logger('TEST', TEST_SETTINGS['logging_dir'] + 'Py_Log_%s.log' % logtime)
log.error('Writes to log file and sends email')
log.debug('Supposed to write to log file, does nothing.')
显然,除了处理程序之外,日志记录还需要自己的日志记录级别。在返回 logger 之前设置 logger.setLevel(logging.DEBUG) 会使其正常工作。文档说
创建记录器时,级别设置为 NOTSET(当记录器是根记录器时,这会导致处理所有消息,或者当记录器是非根记录器时将其委托给父级)。请注意,根记录器是使用级别 WARNING 创建的。
这意味着如果处理程序的级别低于根记录器(不是 ERROR,而是 DEBUG ),那么我猜是一个孩子的处理程序,因为我得到了一个命名记录器?不太确定它的原因,但这确实“修复”了它,以防以后有人遇到这个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句