一、打印到控制台
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, 不能打印输出
#
#
#--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, 并且可以打印输出
#
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, 并且可以打印输出
#
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")