日志调试输出信息
日志级别: critical > error > warning > info > debug,notset 级别越高打印的日志越少,反之亦然,即
debug : 打印全部的日志(notset等同于debug)
info : 打印info,warning,error,critical级别的日志
warning : 打印warning,error,critical级别的日志
error : 打印error,critical级别的日志
critical : 打印critical级别
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输出消息至终端
import logging
import os
logger_fmt ='%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log') #输出路径及路径名
formatter = logging.Formatter(logger_fmt) #输出格式
logger_console_handler = logging.StreamHandler() #输出到终端
logger_console_handler.setFormatter(formatter) # 设置输出格式
logger = logging.getLogger()
if not len(logger.handlers):
logger.addHandler(logger_console_handler)
else:
logger.removeHandler(logger_console_handler)
logger.setLevel(logging.INFO) #设置输出级别
logger.debug('StartBoot')
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输出消息至指定路径
import logging
import os
logger_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log') #存储路径(路径名要正确)
print(Logneme)
formatter = logging.Formatter(logger_fmt)
logger_file_handler = logging.FileHandler(Logneme)
logger_file_handler.setFormatter(formatter)
logger = logging.getLogger()
if not len(logger.handlers):
logger.addHandler(logger_file_handler)
else:
logger.removeHandler(logger_file_handler)
logger.setLevel(logging.INFO)
logger.debug('StartBoot')
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输出消息至文件并定期(每天)删除
import logging
import os
import re
from logging.handlers import TimedRotatingFileHandler
logger_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log')
formatter = logging.Formatter(logger_fmt)
logger_file_handler = TimedRotatingFileHandler(filename=Logneme, when='MIDNIGHT', interval=1, backupCount=2)
logger_file_handler.suffix = "%Y-%m-%d.log"
logger_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")
logger_file_handler.setFormatter(formatter)
logger = logging.getLogger()
if not len(logger.handlers):
logger.addHandler(logger_file_handler)
else:
logger.removeHandler(logger_file_handler)
logger.setLevel(logging.INFO)
logger.debug('StartBoot')
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')
&1)TimedRotatingFileHandler()
功能:用于定期删除日志文件
参数:
filename: 文件名
when: ‘W’, ‘D’, ‘H’, ‘M’, ‘S’, ‘MIDNIGHT’ 分别代表’周’,‘天’,‘时’,‘分’,‘秒’
interval: 时间间隔
backupCount:日志数目
比如,我上面的例子即是每隔一天产生一个日志,超过两个日志将覆盖旧的日志
&2)logger_file_handler.suffix
功能:在日志名后加上后缀
&3)logger_file_handler.extMatch
功能:匹配日志名的后缀
注意:想要实现周期性删除任务,这三个函数都是必要的
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 输出消息至文件并文件超过指定大小清零
import logging
import os
from logging.handlers import RotatingFileHandler
logger_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log')
formatter = logging.Formatter(logger_fmt)
logger_file_handler = RotatingFileHandler(filename=Logneme, maxBytes = 1*1024, backupCount=2)
logger_file_handler.setFormatter(formatter)
logger = logging.getLogger()
if not len(logger.handlers):
logger.addHandler(logger_file_handler)
else:
logger.removeHandler(logger_file_handler)
logger.setLevel(logging.INFO)
logger.debug('StartBoot')
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 终极版:可输出日志到终端并且输出到文件且文件定期删除
import logging
import os
import re
from logging.handlers import TimedRotatingFileHandler
logger_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
Logneme = os.path.join(os.path.abspath('.'), 'debug', 'Log', 'log')
formatter = logging.Formatter(logger_fmt)
logger_file_handler = TimedRotatingFileHandler(filename=Logneme, when='MIDNIGHT', interval=1, backupCount=2)
logger_file_handler.suffix = "%Y-%m-%d.log"
logger_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")
logger_file_handler.setFormatter(formatter)
logger_console_handler = logging.StreamHandler()
logger_console_handler.setFormatter(formatter)
logger = logging.getLogger()
if not len(logger.handlers):
logger.addHandler(logger_file_handler)
logger.addHandler(logger_console_handler)
else:
logger.removeHandler(logger_file_handler)
logger.removeHandler(logger_console_handler)
logger.setLevel(logging.INFO)
logger.debug('StartBoot')
logger.info('StartBoot')
logger.warning('StartBoot')
logger.error('StartBoot')
logger.critical('StartBoot')
以下隐藏内容为源代码,有需求可以下载,当作是对本站的支持,谢谢。
[erphpdown]解压密码:ZMJPY123[/erphpdown]