Logging
# 介绍
logging是Python内置的日志记录系统。
个人目前使用更方便的Loguru模块,只作为笔记留存。
# 日志级别
越往下级别越高,触发条件也应当越严格。
# debug
logging.debug('调试日志信息')
10 调试级别,在程序开发调试时用。
# info
logging.info('信息日志信息')
20 消息级别,正常运行的输出信息。
# warning
logging.warning('警告日志信息')
30 警告级别,现在运行没问题,但是以后可能出现错误的警告信息。
# error
logging.error('错误日志信息')
40 错误级别,程序已经出现错误的信息。
# critical
logging.critical('灾难日志信息')
50 灾难级别,发生的错误非常严重,可能会导致程序的全面崩溃的信息。
# 基础配置
logging.basecConfig(filename='...',format='...',datefmt='...')
了解即可,一般用配置字典来进行配置。
# 日志输出位置
filename='日志文件路径'
不指定则只输出到终端屏幕。
# 日志输出格式
format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s'
%(asctime)s调用日志函数时的格式化时间。%(name)s日志文件名称。%(levelname)s日志级别。%(levelname)s调用日志函数的模块名。%(funcName)s调用日志函数的函数名。%(lineno)d调用日志函数的代码行数。%(message)s用户输出的消息。
# 时间格式
datefmt='%Y-%m-%d %H:%M:%S %p'
# 日志输出级别
level=30
默认是30,也就是warning级别。
# 字典配置
一般写到配置文件或模块中。
LOGGING_DIC = {
'version': 1.0,
# 是否禁用已经存在的logger实例,一般设为False即可
'disable_existing_loggers': False,
# 指定日志格式,日志格式内容一般可以用变量传入,方便修改
'formatters': {
'日志格式名1': {'format': '日志格式'},
'日志格式名2': {'format': '日志格式'}
},
# 会输出日志
'handlers': {
# 输出到屏幕
'日志处理方式名1': {
# 可数字、也可是大写的级别名
'level': '日志级别',
# logging.StreamHandler表示指定输出到屏幕
'class': 'logging.StreamHandler',
# formatters中配置的格式名
'formatter': '日志格式名'
# 输出到文件
'日志处理方式名2': {
'level': '日志级别',
# logging.FileHandler表示指定输出到文件
'class': 'logging.FileHandler',
'formatter': '日志格式名',
# 指定输出日志的文件路径
'filename': '日志文件路径',
# 指定输出到文件的编码格式
'encoding': '编码格式'
}},
}
# 会产生日志并传递给handlers,大多数日志都是传输到一个文件,除非特殊场景
'loggers': {
# logger名
'日志名1': {
# 日志输出位置,可指定多个
'handlers': [handler名1, handler名2],
# 在这里会先过滤一次,到handlers又会过滤一次
'level': '日志级别',
# 默认为True会向上级传递,通常关闭使日志更独立
'propagate': False
},
'日志名2': {... ...}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 使用例子
from logging import config, getLogger
# 导入日志配置字典
config.dictConfig(LOGGING_DIC)
# 获得指定的logger对象
logger01 = getLogger('logger名')
# 发送对应级别的日志到logger所对应的handler
# logger对象.日志级别('日志信息')
logger01.info('This is a info log!')
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 日志轮转
# 介绍
日志文件会随着时间越来越大,为了防止日志文件过大造成打开文件过慢且占用内存多。此时就需要日志轮转,也就是将日志按大小或者时间进行分割,分割成多个日志文件。
超过大小后,会将日志文件以前的内容,全部剪切到日志切割文件,然后将新内容写入日志文件。
# 设置方法
# 日志输出位置中
'handlers': {
'日志处理方式名': {
'level': '日志级别',
# 保存到文件并进行日志轮转
'class': 'logging.handlers.RotatingFileHandler',
'formatter': '日志格式名',
'filename': '日志文件路径',
'encoding': '编码格式',
# 日志文件最大字节大小,此处是5M
'maxBytes': 1024*1024*5,
# 分割的日志文件最大保留数量,超过则最早的将被删除
'backupCount': 10
}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14