1.1 loggin日志模块
用print函数要想同时输出日志信息和时间、所在函数、所在线程等内容是比较困难的。,可以用loggin模块,它是内置的模块。
1.2 日志级别
一共有五个极别,从上到下为由低到高。
日志级别 | 日志函数 | 说明 |
---|---|---|
DEBUG | debug() | 详细的日志信息,主要用于输出调试信息 |
INFO | info() | 输出一些关键节点信息,用于确定程序的流程 |
WARNING | warning() | 一些不期望的事情发生时输出信息(如磁盘可用空间较低),但是此时程序还正常运行。 |
ERROR | error() | 由于严重问题导致某些功能不能正常运行。 |
CRITICAL | critical() | 发生严重错误,导致应用程序不通继续运行时的信息 |
import logging
logging.basicConfig(level=logging.ERROR) # 基本配置,设置级别为ERROR
logging.debug("这是DEBUG级别信息")
logging.info("这是INFO级别信息")
logging.warning("这是WARNING级别信息")
logging.error("这是ERROR级别信息")
logging.critical("这是CRITICAL级别信息")
输出:
ERROR:root:这是ERROR级别信息
CRITICAL:root:这是CRITICAL级别信息
较低级别的信息就被隐藏了。
我们发现输出的是:root,如果报告是哪个模块输出的信息:
# filename: test/test_log.py
import logging
def test():
logging.basicConfig(level=logging.ERROR)
log = logging.getLogger(__name__) # __name__ 表示当前的模块
log.debug("这是DEBUG级别信息")
log.info("这是INFO级别信息")
log.warning("这是WARNING级别信息")
log.error("这是ERROR级别信息")
log.critical("这是CRITICAL级别信息")
调用时:
# filename: main.py
import test.test_log as mylog
mylog.test()
输出:包名和模块名
ERROR:test.test_log:这是ERROR级别信息
CRITICAL:test.test_log:这是CRITICAL级别信息
1.3 日志信息格式化
日志格式参数 | 说明 |
---|---|
%(name)s | 日志器名 |
%(asctime)s | 输出日志时间 |
%(filename)s | 包括路径的文件名 |
%(levelname)s | 日志等级 |
%(funcName)s | 函数名 |
%(processName)s | 进程名 |
%(threadName)s | 线程名 |
%(message)s | 输出的信息 |
设置:basicConfig()函数的format参数即可。
import logging
import time
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(filename)s - %(funcName)s - %(message)s')
log = logging.getLogger(__name__)
log.debug("这是DEBUG级别信息")
log.info("这是INFO级别信息")
log.warning("这是WARNING级别信息")
log.error("这是ERROR级别信息")
log.critical("这是CRITICAL级别信息")
def funlog():
log.info('进入funlog函数')
time.sleep(1)
log.info('funlog函数执行完毕')
log.info("调用funlog函数...")
funlog()
输出:
2022-12-18 11:56:00,919 - main.py - <module> - 这是INFO级别信息
2022-12-18 11:56:00,919 - main.py - <module> - 这是WARNING级别信息
2022-12-18 11:56:00,919 - main.py - <module> - 这是ERROR级别信息
2022-12-18 11:56:00,919 - main.py - <module> - 这是CRITICAL级别信息
2022-12-18 11:56:00,919 - main.py - <module> - 调用funlog函数...
2022-12-18 11:56:00,919 - main.py - funlog - 进入funlog函数
2022-12-18 11:56:01,920 - main.py - funlog - funlog函数执行完毕
一个递归函数的解析:
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(funcName)s > %(message)s')
log = logging.getLogger(__name__)
def add(n: int) -> int:
log.info(f"调用,n当前值是:{n}")
if n == 1:
log.info("递归返回中...")
return 1
else:
value = n + add(n - 1)
log.info("递归返回中...")
return value
print(add(5))
输出:
2022-12-18 12:04:49,650 - add > 调用,n当前值是:5
2022-12-18 12:04:49,651 - add > 调用,n当前值是:4
2022-12-18 12:04:49,651 - add > 调用,n当前值是:3
2022-12-18 12:04:49,651 - add > 调用,n当前值是:2
2022-12-18 12:04:49,651 - add > 调用,n当前值是:1
2022-12-18 12:04:49,651 - add > 递归返回中...
2022-12-18 12:04:49,651 - add > 递归返回中...
2022-12-18 12:04:49,651 - add > 递归返回中...
2022-12-18 12:04:49,651 - add > 递归返回中...
2022-12-18 12:04:49,651 - add > 递归返回中...
15
1.4 日志写到文件中
在basicConfig中添加关键字参数:
logging.basicConfig(level=logging.INFO, filename="log.txt", format='%(asctime)s - %(funcName)s > %(message)s')
log = logging.getLogger(__name__)
此时信息会输出到:log.txt中。
注意: 文件名指定的路径必须存在。
1.5 停用日志
loggin.disable(level)
这个方法一般放在import下面
import logging
logging.disable(logging.INFO)
logging.basicConfig(level=logging.INFO, filename="log.txt", format='%(asctime)s - %(funcName)s > %(message)s')
log = logging.getLogger(__name__)
def add(n: int) -> int:
log.info(f"调用,n当前值是:{n}")
if n == 1:
log.info("递归返回中...")
return 1
else:
value = n + add(n - 1)
log.info("递归返回中...")
return value
print(add(5))
以上没有日志输出。
标签:12,logging,log,PYTHON,18,2022,模块,级别 From: https://www.cnblogs.com/three-sheep/p/16990186.html