https://www.cnblogs.com/nancyzhu/p/8551506.html
https://www.cnblogs.com/deeper/p/7404190.html
https://blog.csdn.net/sollor525/article/details/79152526
一、打印到控制台
import logging logging.debug('debug 信息') logging.warning('只有这个会输出。。。') logging.info('info 信息')
由于默认设置的等级是warning,所有只有warning的信息会输出到控制台。
WARNING:root:只有这个会输出。。。
利用logging.basicConfig()打印信息到控制台
import logging logging.basicConfig(format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s', level=logging.DEBUG) logging.debug('debug 信息') logging.info('info 信息') logging.warning('warning 信息') logging.error('error 信息') logging.critical('critial 信息')
由于在logging.basicConfig()中的level 的值设置为logging.DEBUG, 所有debug, info, warning, error, critical 的log都会打印到控制台。
所以如果设置level = logging.info()的话,debug 的信息则不会输出到控制台。
二、利用logging.basicConfig()保存log到文件
logging.basicConfig(level=logging.DEBUG,#控制台打印的日志级别 filename='new.log', filemode='a',##模式,有w和a,w就是写模式,每次都会重新写日志,覆盖之前的日志 #a是追加模式,默认如果不写的话,就是追加模式 format= '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s' #日志格式 )
如果在logging.basicConfig()设置filename 和filemode,则只会保存log到文件,不会输出到控制台。
logging日志模块四大组件
在介绍logging模块的日志流处理流程之前,我们先来介绍下logging模块的四大组件:
组件名称 | 对应类名 | 功能描述 |
---|---|---|
日志器 | Logger | 提供了应用程序可一直使用的接口 |
处理器 | Handler | 将logger创建的日志记录发送到合适的目的输出 |
过滤器 | Filter | 提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录 |
格式器 | Formatter | 决定日志记录的最终输出格式 |
如果在logging.basicConfig()设置filename 和filemode,则只会保存log到文件,不会输出到控制台。
写入日志 my.log, 不能打印输出
#https://www.cnblogs.com/nancyzhu/p/8551506.html #https://blog.csdn.net/sollor525/article/details/79152526 #--coding:UTF-8-- import logging log_format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s' date_format = "%m/%d/%Y %H:%M:%S %p" filemode='a' ##a是追加模式,默认为追加模式;w是写模式,会覆盖之前的日志 logging.basicConfig(filename='my.log', filemode='a', level=logging.INFO, format=log_format) #format-设置打印输出格式,a是追加模式,默认如果不写的话,就是追加模式 logging.debug('debug') logging.info('info') logging.warning('warning') logging.error('error') logging.critical('critial')
写入日志 all.log, 并且可以打印输出
#https://www.cnblogs.com/nancyzhu/p/8551506.html import logging from logging import handlers 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是间隔的时间单位,单位有以下几种: # W 每星期(interval==0时代表星期一) # midnight 每天凌晨 th.setFormatter(format_str) #设置文件里写入的格式 self.logger.addHandler(sh) #把对象加到logger里 self.logger.addHandler(th) if __name__ == '__main__': log = Logger(filename='all.log',level='debug') #filename='all.log' level='debug' log.logger.debug('debug') log.logger.info('info') log.logger.warning('警告') log.logger.error('报错') log.logger.critical('严重') #Logger('error.log', level='error').logger.error('error')
写入日志 log1.log, 并且可以打印输出
#https://www.cnblogs.com/deeper/p/7404190.html import logging logger = logging.getLogger(__name__) logger.setLevel(level = logging.INFO) handler = logging.FileHandler("log1.txt") handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) console = logging.StreamHandler() console.setLevel(logging.INFO) logger.addHandler(handler) logger.addHandler(console) logger.info("Start") logger.debug("debug") logger.warning("fail") logger.info("Finish")