logging模块打印日志

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138683229901532c40b749184441dbd428d2e0f8aa50e000

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")



猜你喜欢

转载自blog.csdn.net/qq_34638161/article/details/80744118