# logging模块 # 日志模块 # 日志 # 日志用来记录用户行为的,有没有错都要记录下来 # 或者记录代码的执行过程的时候,咱们须要记录下来 # 排错的时候须要打印不少细节来帮助咱们排错时,咱们须要记录下来 # 严重的错误应该记录下来 # 在logging模块中有5个级别, 默认只输出info以上的级别不包括info级别 # import logging # logging.debug('debug message') # 低级别 排错信息 # logging.info('info message') # 正常的信息 # logging.warning('warning message') # 警告嘻嘻 # logging.error('error message') # 错误信息 # logging.critical('critical message') # 高级别 # 严重错误信息 # 能够经过配置的方式使logging日志输出的信息更好看 # 两种配置日志的方式 # basicconfig 用法简单,能作的事情相对少 # 缺点 # 记录到日志文件中时,解决不了中文的乱码问题 # 不能同时往文件和屏幕上输出 # 配置log对象 用户比较复杂,能作的事情相对多 # 配置日志logging, level=loggin.DEBUG,配置debug级别以上的信息都输出。 NOTSET = 0为最低 # format,格式化,asctime 是时间,对应datefmt。 filename是文件名字,对应filename。lineo是多少行。levelname是等级。message是信息内容 # # import logging # print('%(key)s' % {'key' : 'value'}) # value # logging.basicConfig(level = logging.DEBUG, # format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # datefmt = '%a, %d %b %Y %H:%M:%S', # filename = 'test.log', # filemode = 'a') # # logging.debug('debug message') # 低级别 排错信息 # logging.info('info message') # 正常的信息 # logging.warning('warning message') # 警告嘻嘻 # logging.error('error message') # 错误信息 # logging.critical('critical message') # 高级别,基于操做系统级别的信息了 # 严重错误信息 # # # 例,输入值错误,异常处理后,将错误输出到日志中 # try: # int(input('num >>>')) # except ValueError: # logging.error('input ValueError') # basicConfig缺点 # 记录到日志文件中时,解决不了中文的乱码问题 # 不能同时往文件和屏幕上输出 # 因此通常不用logging中的basicConfig来记录日志 # 此种日志为灵活,充分解耦,比较经常使用 import logging logger = logging.getLogger() # 建立一个logger对象 # 建立一个handler,用于写入日志文件 fh = logging.FileHandler('test2.log', encoding='utf-8') # 建立一个文件描述符 # 再建立一个handler,用于输出到控制台 ch = logging.StreamHandler() # 在建立一个控制台的文件秒速福 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s[line:%(lineno)d] -%(message)s') # 设置输出格式化的格式 #formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # datefmt = '%a, %d %b %Y %H:%M:%S') fh.setLevel(logging.DEBUG) # 设置输出等级 # 文件操做符和格式关联 fh.setFormatter(formatter) # 设置日志文件(文件描述符)为该格式输出 ch.setFormatter(formatter) # 设置控制台(文件描述符)为该格式输出 # logger对象和文件操做符关联绑定 logger.addHandler(fh) # logger对象能够添加多个fh和ch对象 将日志操做符绑定到logger中 logger.addHandler(ch) # 将控制台操做符绑定到logger中 logger.debug('logger debug message') logger.info('logger info message') logger.warning('logger warning message') logger.error('logger error message') logger.critical('logger critical message') # 例,输入值错误,异常处理后,将错误输出到日志中 try: int(input('num >>>')) except ValueError: logger.error('input ValueError') # zabbix 比较好的监控系统
logging 类spa
class Logger(object): level_relations = { 'debug':logging.DEBUG, 'info':logging.INFO, 'warning':logging.WARNING, 'error':logging.ERROR, 'crit':logging.CRITICAL }#日志级别关系映射 def __init__(self, filename, level='info', when='D', backCount=3, fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'): self.logger = logging.getLogger(filename) format_str = logging.Formatter(fmt)#设置日志格式 self.logger.setLevel(self.level_relations.get(level))#设置日志级别 sh = logging.StreamHandler()#往屏幕上输出 sh.setFormatter(format_str) #设置屏幕上显示的格式 th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount,encoding='utf-8')#往文件里写入#指定间隔时间自动生成文件的处理器 #实例化TimedRotatingFileHandler #interval是时间间隔,backupCount是备份文件的个数,若是超过这个个数,就会自动删除,when是间隔的时间单位,单位有如下几种: # S 秒 # M 分 # H 小时、 # D 天、 # W 每星期(interval==0时表明星期一) # midnight 天天凌晨 th.setFormatter(format_str)#设置文件里写入的格式 self.logger.addHandler(sh) #把对象加到logger里 self.logger.addHandler(th) logfilename = 'NBT100_' + time.strftime('%Y-%m-%d') + '.log' log = Logger(logfilename, level='debug') log.logger.info('[%s]收到沣泰FTM13不带阀命令1:' % time.strftime('%Y-%m-%d %H:%M:%S'))