之前总结过关于在项目中使用logging模块的好处,时间过去三四个月,结果从新遇到这个东西,又想不起它的基础用法,翻看过去文章发现还是有些进阶的,特此,写一篇最基础的应用来结束对logging的认识
- 过去两篇文章
logging | 项目开发中日志模块logging在整个工程中的应用
unittest | 使用unittest模块来测试logging日志模块功能
建议先了解本篇文章,然后在这篇文章的基础上继续阅读进阶篇,进阶篇如上 顺序阅读即可
import loggingprint('logging _nameToLevel:',logging._nameToLevel)print('logging _levelToName:',logging._levelToName)
# 日志优先级:CRIRICAL>ERROR>WARNING>INFO>DEBUG# 当日志级别设置为某个级别时,则低于该级别的日志将不输出。如日志级别设置为INFO,则DEBUG级别的日志将不输出。# 根日志器默认日志级别为WARNING,这里将其重置,以保证debug、info级别的日志也能输出# logging.basicConfig(level=logging.ERROR)
# 配置基本的日志输出格式和级别
logging.basicConfig(level=logging.INFO, format='[%(asctime)s] [%(threadName)s] [line:%(lineno)d] %(levelname)s:%(message)s')# # {'CRITICAL / FATAL': 50, 'ERROR': 40, 'WARN': 30, 'WARNING': 30, 'INFO': 20, 'DEBUG': 10, 'NOTSET': 0}
logging.debug("1 This is a %s message.",logging.getLevelName(logging.DEBUG))
logging.info("2 This is an %s message.",logging.getLevelName(logging.INFO))
logging.warning("3 This is a %s message.",logging.getLevelName(logging.WARNING))
logging.error("4 This is an %s message.",logging.getLevelName(logging.ERROR))
logging.critical("5 This is a %s message.",logging.getLevelName(logging.CRITICAL))
logging.fatal("6 This is a %s message.",logging.getLevelName(logging.FATAL))logging.log(logging.ERROR,"This ia a message from logging.log().")# 使用不同级别记录日志
logging.debug("这是一条调试信息")
logging.info("这是一条普通信息")
logging.warning("这是一条警告信息")
logging.error("这是一条错误信息")
logging.critical("这是一条严重错误信息")
D:\ANACONDA\envs\webdev\python.exe E:\pythonProject\PythonProject\learnTest\looger1.py
[2024-11-20 21:07:34,415] [MainThread] [line:30] INFO:2 This is an INFO message.
[2024-11-20 21:07:34,415] [MainThread] [line:31] WARNING:3 This is a WARNING message.
[2024-11-20 21:07:34,415] [MainThread] [line:32] ERROR:4 This is an ERROR message.
[2024-11-20 21:07:34,415] [MainThread] [line:33] CRITICAL:5 This is a CRITICAL message.
[2024-11-20 21:07:34,415] [MainThread] [line:34] CRITICAL:6 This is a CRITICAL message.
[2024-11-20 21:07:34,415] [MainThread] [line:36] ERROR:This ia a message from logging.log().
[2024-11-20 21:07:34,415] [MainThread] [line:41] INFO:这是一条普通信息
[2024-11-20 21:07:34,415] [MainThread] [line:42] WARNING:这是一条警告信息
[2024-11-20 21:07:34,415] [MainThread] [line:43] ERROR:这是一条错误信息
[2024-11-20 21:07:34,415] [MainThread] [line:44] CRITICAL:这是一条严重错误信息
logging _nameToLevel: {'CRITICAL': 50, 'FATAL': 50, 'ERROR': 40, 'WARN': 30, 'WARNING': 30, 'INFO': 20, 'DEBUG': 10, 'NOTSET': 0}
logging _levelToName: {50: 'CRITICAL', 40: 'ERROR', 30: 'WARNING', 20: 'INFO', 10: 'DEBUG', 0: 'NOTSET'}
- 参数解释
format=‘
[%(asctime)s] [%(threadName)s] [line:%(lineno)d] %(levelname)s:%(message)s
’
%(asctime)s:日志记录的时间戳。
%(threadName)s:线程名称,表示产生日志记录的线程的名字
[line:%(lineno)d]:日志记录产生的代码行号。%(lineno)d 会获取当前日志记录的行号。
-:时间戳和日志级别之间的分隔符。
%(levelname)s:日志级别名称(如DEBUG、INFO、WARNING等)。
::日志级别和日志消息之间的分隔符。
%(message)s:日志消息本身。
使用句柄
import logging# # 配置日志记录器,将日志写入文件
# logging.basicConfig(filename='app.log',level=logging.DEBUG,
# format='[%(asctime)s] [%(threadName)s] [line:%(lineno)d] %(levelname)s:%(message)s')
# # 参数filename='app.log' 一旦设置好 则控制台不会输出日志信息 将所有信息会写入到log日志文件
#
#
# logging.debug("这条消息会被记录到文件中")
# logging.info("程序正常运行中...")# 上述是一种便捷快速的方法 复杂程序使用日志记录器# 创建一个日志记录器(logger) 将所有消息记录到文件中,同时将错误级别及以上的消息输出到控制台
logger = logging.getLogger('my_app') # 名称
logger.setLevel(logging.ERROR) # 日志优先级:CRIRICAL>ERROR>WARNING>INFO>DEBUG# 创建一个文件处理器 文件写入的信息 应该是程序中所有出现的信息 因此级别应该设置为最低
file_handler = logging.FileHandler('appfilerecord.log')
file_handler.setLevel(logging.DEBUG) # 设置信息处理的级别 DEBUG 将所有DEBUG级别以上的信心写入appfilerecord文件中# 创建一个控制台处理器 控制台显示的应该是级别较高的信息 因此设置error以上的级别
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.ERROR)# 创建一个格式器,并将它添加到处理器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)# 将处理器添加到日志记录器
logger.addHandler(file_handler)
logger.addHandler(console_handler)# 使用日志记录器
# 日志优先级:CRIRICAL>ERROR>WARNING>INFO>DEBUG
logger.debug("这条消息会被记录到文件中") # 文件处理器
logger.error("这条错误消息会同时出现在文件和控制台中") # 控制台处理器
- 基本流程步骤
# 创建一个日志记录器(logger)
# 创建一个文件处理器logging.FileHandler('appfilerecord.log')
# 创建一个控制台处理器logging.StreamHandler()
# 创建一个格式器,并将它添加到处理器logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 将处理器添加到日志记录器