¸üÐÂʱ¼ä:2020Äê08ÔÂ03ÈÕ14ʱ12·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:
· ÈÕÖ¾¶ÔÓÚWebÓ¦ÓõÄ×÷ÓþÍÏñ·É»úµÄºÚÏ»×Ó£¬ÓÃÓڼǼWebÓ¦ÓõÄÔËÐÐ״̬£¬·½±ã¿ª·¢Õß¿ìËÙ¶¨Î»´íÎó²¢½øÐÐÐÞ¸´¡£
· pythonÖÐÄÚÖÃµÄ loggingÄ£¿é¹¦ÄÜÈ«Ãæ£¬webÓ¦Óü¯³ÉÈÕÖ¾¹¦ÄÜ»ù±¾¶¼ÊÇ»ùÓÚ¸ÃÄ£¿é¡£
1. »ù±¾Ê¹ÓÃ
· loggingÄ£¿éÌṩÁËĬÈÏÈÕÖ¾£¬Ö»ÐèҪͨ¹ýbasicConfig()º¯Êý¾Í¿ÉÒÔ¿ìËÙÅäÖÃ
· loggingÄ£¿éÌṩÁ˶à¸öÈÕÖ¾¼¶±ð: ÖÂÃü´íÎóCRITICAL /´íÎóERROR /¾¯¸æWARNING /ÐÅÏ¢INFO /µ÷ÊÔDEBUG£¬·½±ã¿ª·¢ÕßÌṩÐèÇó½øÐÐÈÕÖ¾¹ýÂË¡£
´úÂëʾÀý
import logging
def basic_log():
"""ʹÓÃĬÈÏÈÕÖ¾
ȱµã: ÎļþÊä³ö/¿ØÖÆÌ¨Êä³ö ¶þѡһ"""
format = "%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s"
# ÉèÖÃĬÈÏÈÕÖ¾
logging.basicConfig(level="DEBUG", format=format, filename='basic.log')
# ʹÓÃĬÈÏÈÕÖ¾
logging.debug('this is a debug message')
logging.info('this is a info message')
logging.warning('this is a warn message')
logging.error('this is a error message')
if __name__ == '__main__':
basic_log()
· ×¢Òâµã:
ĬÈÏÈÕÖ¾µÄȱµãÊÇÎļþÊä³ö/¿ØÖÆÌ¨Êä³öÖ»Äܶþѡһ
2. ×Ô¶¨ÒåÈÕÖ¾Æ÷
· ×Ô¶¨ÒåÈÕÖ¾Æ÷¿ÉÒÔÌí¼Ó¶à¸öÊä³ö´¦ÀíÆ÷, ½«ÈÕ־ͬʱÊä³öµ½ ¿ØÖÆÌ¨ & Îļþ & Óʼþ µÈ»·¾³ÖÐ
· ×Ô¶¨ÒåÈÕÖ¾Æ÷µÄ»ù±¾Ê¹Óò½Öè:
(1)´´½¨/»ñÈ¡×Ô¶¨ÒåÈÕÖ¾Æ÷
(2)´´½¨Êä³ö´¦ÀíÆ÷
(3)ÈÕÖ¾Æ÷Ìí¼Ó´¦ÀíÆ÷
(4)ʹÓÃ×Ô¶¨ÒåÈÕÖ¾
import logging
from logging.handlers import RotatingFileHandler
def custem_log():
"""ʹÓÃ×Ô¶¨ÒåÈÕÖ¾ ¿ÉÒÔͬʱÔÚ¿ØÖÆÌ¨ºÍÎļþÊä³ö"""
# ´´½¨/»ñÈ¡×Ô¶¨ÒåµÄÈÕÖ¾Æ÷
mylogger = logging.getLogger('mylogger')
# ÉèÖÃÈ«¾Ö¼¶±ð
mylogger.setLevel('DEBUG')
# ´´½¨¿ØÖÆÌ¨´¦ÀíÆ÷
console_handler = logging.StreamHandler()
# ¸ø´¦ÀíÆ÷ÉèÖÃÊä³ö¸ñʽ
console_formatter = logging.Formatter(fmt='%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
console_handler.setFormatter(console_formatter)
# ÈÕÖ¾Æ÷Ìí¼Ó´¦ÀíÆ÷
mylogger.addHandler(console_handler)
# ´´½¨Îļþ´¦ÀíÆ÷
file_handler = RotatingFileHandler(filename='mylogger.log', maxBytes=100 * 1024 * 1024, backupCount=10) # ת´æÎļþ´¦ÀíÆ÷ µ±´ïµ½ÏÞ¶¨µÄÎļþ´óСʱ, ¿ÉÒÔ½«ÈÕ־ת´æµ½ÆäËûÎļþÖÐ
# ¸ø´¦ÀíÆ÷ÉèÖÃÊä³ö¸ñʽ
file_formatter = logging.Formatter(fmt='[%(asctime)s] %(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
file_handler.setFormatter(file_formatter)
# µ¥¶ÀÉèÖÃÎļþ´¦ÀíÆ÷µÄÈÕÖ¾¼¶±ð
file_handler.setLevel('WARN')
# ÈÕÖ¾Æ÷Ìí¼Ó´¦ÀíÆ÷
mylogger.addHandler(file_handler)
# ʹÓÃ×Ô¶¨ÒåÈÕÖ¾
mylogger.debug('this is a debug message')
mylogger.info('this is a info message')
mylogger.warning('this is a warn message')
mylogger.error('this is a error message')
if __name__ == '__main__':
custem_log()
3. Óʼþ·¢ËÍÈÕÖ¾
· ÏîÄ¿ÉÏÏߺ󣬿ª·¢ÕßÍùÍù²»»á³ÖÐø¹Ø×¢ËùÓеÄÈÕÖ¾ÐÅÏ¢£¬ÎªÁ˸ü¿ìµÄ·¢Ïֺͽâ¾ö´íÎ󣬱Ƚϳ£¹æµÄÒ»ÖÖ·½Ê½Êǽ«Ò»°ã»òÕ߸߼¶±ðµÄ´íÎóдÈëµç×ÓÓʼþ²¢·¢Ë͸ø¿ª·¢Õß¡£
· loggingÄ£¿é¿ÉÒÔÅäÖÃÒ»¸öSMTPHandlerÓʼþÊä³ö´¦ÀíÆ÷À´ÊµÏÖ¸ÃÐèÇó
´úÂëʾÀý
import logging
from logging.handlers import SMTPHandler
def mail_log():
"""ʹÓÃÓʼþÊä³öÈÕÖ¾, ½«ÈÕÖ¾ÒÔÓʼþÐÎʽ·¢ËÍ"""
# ´´½¨/»ñÈ¡×Ô¶¨ÒåµÄÈÕÖ¾Æ÷
mylogger = logging.getLogger('mylogger')
# ÉèÖÃÈ«¾Ö¼¶±ð
mylogger.setLevel('DEBUG')
# ´´½¨Óʼþ´¦ÀíÆ÷
mail_handler = SMTPHandler(
mailhost=('smtp.163.com', 25), # SMTP³ÆÎª¼òµ¥Óʼþ´«ÊäÐÒé, 163ÌṩÁËÖ§³Ö¸ÃÐÒéµÄÓʼþ·þÎñÆ÷, ¶Ë¿ÚΪ25
fromaddr='czbk_zzz@163.com', # ·¢¼þÈ˵ØÖ·
toaddrs=['xxx@itcast.cn', 'xx@qq.com'], # ÊÕ¼þÈ˵ØÖ·
subject='Log Error',
credentials=('czbk_zzz@163.com', 'HZLLPADWYUWUVDIQ') # ·¢¼þÈ˵ÄÓʼþµØÖ· ºÍ ·¢¼þÈ˵ÄÊÚȨÃÜÂë
)
# ¸ø´¦ÀíÆ÷ÉèÖÃÊä³ö¸ñʽ
mail_formatter = logging.Formatter(fmt='%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
mail_handler.setFormatter(mail_formatter)
# ÉèÖÃÓʼþ´¦ÀíÆ÷µÄÈÕÖ¾¼¶±ð
mail_handler.setLevel('ERROR')
# ÈÕÖ¾Æ÷Ìí¼Ó´¦ÀíÆ÷
mylogger.addHandler(mail_handler)
# ʹÓÃ×Ô¶¨ÒåÈÕÖ¾
mylogger.debug('this is a debug message')
mylogger.info('this is a info message')
mylogger.warning('this is a warn message')
mylogger.error('this is a error message')
if __name__ == '__main__':
mail_log()
·¢ËÍÓʼþÊǺÄʱ²Ù×÷£¬¿ÉÒÔ¿¼ÂÇʹÓÃceleryÖ´ÐÐÒì²½ÈÎÎñ£¬Ìá¸ßÏìÓ¦ËÙ¶È¡£
²ÂÄãϲ»¶
ÀÖÓã²¥¿ÍPythonÅàѵ¿Î³Ì
Python½Ì³Ì9£ºPythonÖÐÔõôעÊÍ´úÂ룿
2020-07-16Python½Ì³Ì8£ºÁ˽âPythonµÄÖ´ÐÐÔÀí
2020-07-16Python½Ì³Ì7£ºÊ¹ÓÃpycharm±àдµÚÒ»¸öPython³ÌÐò
2020-07-16Python½Ì³Ì6£ºPython³£ÓõĿª·¢¹¤¾ßÓÐÄÄЩ£¿
2020-07-16Python½Ì³Ì5£ºPython 2.xºÍPython 3.xµÄÇø±ðÓÐÄÄЩ£¿
2020-07-16Python½Ì³Ì4£ºPythonÓÐÄÄЩ°æ±¾£¿
2020-07-16
±±¾©Ð£Çø