概要
logging是Python中用于记录日志的基本工具。通过log的分析,可以方便用户了解系统或软件、应用的运行情况。本篇文章简单记录了基本控制台打印和写入日志文件的操作。
基本组件
logger
logger是进行log日志最主要的组件,提供应用程序代码直接使用的接口,一般来说,所有的输出以及写入都使用logger。
简单实例化:
test_logger = logging.getLogger('test')
test_logger是实例化后的logger名,可直接调用,logging.getLogger
的参数test是此次实例化的标识名,每次实例化需要不同的参数名,才可保证不同的logger之间的正常使用。
设置log等级:
设置等级之后,在打印日志的时候只对高于设置等级的日志进行输出打印。
test_logger.setLevel(logging.DEBUG)
日志等级 | 描述 |
---|---|
DEBUG | 最详细的日志信息,典型应用场景是 问题诊断 |
INFO | 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 |
WARNING | 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 |
ERROR | 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 |
CRITICAL | 当发生严重错误,导致应用程序不能继续运行时记录的信息 |
加载handle
test_logger.addHandler(test_handler)
handle是处理组件下面会有介绍,加载handle的目的主要是配置logger,对打印的数据进行规范。
打印
test_logger.debug("这是一条Debug日志") # 注意此等级因为低于info等级所以即使写了也不打印输出
test_logger.info("这是一条Info日志")
handle
handle一般是logging的一个处理数据格式和一些管理设定的组件,用于将日志记录发送到指定的目的位置(一般指文件。
基本操作
实例化用logging.FileHandler创建,带入文档名,编码设定等参数。
test_handler= logging.FileHandler('位置及文件名', encoding='utf-8')
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.addHandler(logging.FileHandler(os.path.join('logs', log_name)))
设置日志等级,这里设置的等级是优先于logger设定的日志等级。
StreamHandler能够将日志信息输出到sys.stdout, sys.stderr 或者类文件对象(更确切点,就是能够支持write()和flush()方法的对象)。FileHandler并且可以设置文件流输入到.log文件内
test_handler.setLevel(logging.INFO)
设置日志格式
test_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
实例展示
日志初始化
#logger初始化
logger1 = logging.getLogger('1')
logger2 = logging.getLogger('2')
#设置logger初始等级
logger1 .setLevel(logging.DEBUG) #高于debug等级的日志才打印
logger2 .setLevel(logging.Info) #高于info等级的日志才打印
# handle初始化及配置
handler1 = logging.FileHandler('log1.log', encoding='utf-8') #相对路径
handler1 .setLevel(logging.INFO) #设置handle日志等级
handler1 .setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) #设置handle的基本日志格式
handler2 = handler1 .FileHandler('D:/pycharm/log/log2.log', encoding='utf-8') #绝对路径
handler2.setLevel(logging.WARNING)
handler2.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
# 加载handle
logger1 .addHandler(handler1 )
logger2 .addHandler(handler2)
# 日志写入文件
logger1.info("我是logger1写入.log文件的一条Info日志")
logger2.warning("我是logger2写入.log文件的一条Warning日志")
# 若只需打印到控制台可以直接调用logging
logging.debug("我是被打印到控制台的一条debug日志")