本文主要参考:
Python实用教程系列——Logging日志模块 - 那个百分十先生的文章 - 知乎
在此对作者表示感谢!
在Python中,logging可以代替print()函数在代码调试中进行日志打印等。后者只适用于较小的程序中。但是在实际的工程项目中,我们需要保存程序运行的日志,以排查程序在某一个时候崩溃的具体原因,以便及时定位bug进行抢救。
一、日志等级
logging中的日志等级如下:
设置打印日志的级别,level级别以上的日志会打印出。默认WARNING 级别。
level = logging.DEBUG 、INFO 、WARNING、ERROR、CRITICAL
二、Logging.basicConfig()
logging.basicConfig()的参数除了日志等级以外,还可以设置其他的参数。
上表提到日志的输出格式参数format,其控制着日志输出的一些格式:
三、例子
实现将同一项目不同文件的日志同时输出到屏幕和log.txt。
- 入口文件run.py
from xxx import Data
import logging
def setup_logger(pth):
logger = logging.getLogger()
logger.setLevel(logging.INFO)
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s: - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# 使用FileHandler输出到文件
fh = logging.FileHandler(results_pth + 'log.txt')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
# 使用StreamHandler输出到屏幕
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
# 添加两个Handler
logger.addHandler(ch)
logger.addHandler(fh)
if __name__ == '__main__':
pth = 'xxx'
setup_logger(pth)
logger = logging.getLogger(__name__)
# data
data = Data()
- 调用文件data.py
import pandas as pd
import logging
logger = logging.getLogger(__name__)
class Data:
def __init__(self, pth):
logger.info('Loading data...')