下面列出了模块定义的基本类及其功能。
所有的日志输出都需要指定级别,logging日志定义了以下级别
Level(级别) | Numeric value(对应的值) |
---|---|
NOTSET | 0 |
DEBUG | 10 |
INFO | 20 |
ERROE | 30 |
WARNING | 40 |
CRITICAL | 50 |
'%(asctime)s|%(processName)s|%(threadName)s|%(levelname)s|%(pathname)s|%(filename)s:%(lineno)d|%(funcName)s|%(message)s'
name | 格式 | 描述信息 |
---|---|---|
asctime | %(asctime)s | 日志显示时间,比如: 2019-05-13 22:12:11,337 |
processName | %(processName)s | 显示当前进程 |
threadName | %(threadName)s | 显示当前线程 |
levelname | %(levelname)s | 当前日志级别 |
filename | %(levelname)s | 当前所在的py文件名 |
lineno | %(lineno)d | 当前日志输出所在的行数 |
funcName | %(funcName)s | 当前所在的函数名字 |
message | %(message)s | 当前输出的信息 |
pathname | %(pathname)s | 当前py文件的完整路径 |
日志输出格式也简单 INFO:root:info message
# 导入logging 模块
import logging
# 设置logging的级别和日志文件名
logging.basicConfig(level=logging.INFO, filename='logger.log')
# 开始测试日志的输出
logging.info("logging info")
# 输出格式为INFO:root:info message
所以接下来我们需要完善日志的配置
在上一段落中已经介绍了logging支持很多的输出格式
日志中输出显示: [2019-05_13 23:08:01]|MainProcess|MainThread|INFO|python.py:13|<module>|logging message
import logging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # 日志输出格式
datefmt='[%Y-%m_%d %H:%M:%S]', # 日志显示的日期
filename='logger.log', # 日志文件名
filemode='a' # 日志读写模式
)
logging.info("logging message")
但是此方式日志只是显示在日志文件中,无法输出到控制台
输出文本:
2019-05-13 23:33:15,964|MainProcess|MainThread|INFO|E:/pythonSpider/loggingDefine/python.py|python.py:31|<module>|1111111
import logging
from logging import handlers
# 日志输出格式
strDefaultFormatter = '%(asctime)s|%(processName)s|%(threadName)s|%(levelname)s|%(pathname)s|%(filename)s:%(lineno)d|%(funcName)s|%(message)s'
# 设置日志文件以及设置日志按天进行输出日志文件
objRotatingHandler = handlers.TimedRotatingFileHandler(
"logger.log", # 日志文件
when='D', # 什么时候日志的切换
)
# 设置默认的日志输出格式
objFormatter = logging.Formatter(strDefaultFormatter)
objRotatingHandler.setFormatter(objFormatter)
logging.getLogger().addHandler(objRotatingHandler)
logging.getLogger().propagate = False
# 将日志同时输出控制台和日志文件中
objConsoleHandler = logging.StreamHandler()
objConsoleHandler.setFormatter(objFormatter)
logging.getLogger().addHandler(objConsoleHandler)
# 设置日志的级别
logging.getLogger().setLevel(logging.INFO)
# 设置requests模块请求是的日志级别
logging.getLogger("requests").setLevel(logging.NOTSET)
# 设置urllib3的日志级别
logging.getLogger("urllib3").setLevel(logging.NOTSET)
# 测试
logging.info(1111111)