1 # 日志等级
2 logging.debug() # 10
3 logging.info() # 20
4 logging.warning() # 30
5 logging.error() # 40
6 logging.critical() # 50
7
8
9 # logger对象:负责产生各种级别的日志
10 log = logging.getLogger('name') # name 用来表示日志与什么业务有关
11 log.info()
12 log.error()
13 ....
14
15 # filter对象:过滤日志
16
17
18 # handler对象:控制输出的目标
19 s = logging.FileHandler('文件')
20 s1 = logging.StreamHandler() # 终端
21
22 # formatter对象:日志格式
23 logging.Formatter()
24
25 # 绑定logger与handler
26 log.addHandler(s)
27 log.addHandler(s1)
28
29 # 绑定formatter与handler
30 s.setFormatter(formatter)
31
32 # logger产生日志
33 log.info('aaa')
日志模版
1 # 定义日志输出格式
2 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
3 '[%(levelname)s][%(message)s]' # 其中name为getlogger指定的名字
4 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
5
6 id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
7
8
9 # 如果不存在定义的日志目录就创建一个
10 if not os.path.isdir(BASE_LOG):
11 os.mkdir(BASE_LOG)
12
13 # log文件的全路径
14 logfile_path = os.path.join(BASE_LOG, 'log.log')
15
16 # log配置字典
17 LOGGING_DIC = {
18 'version': 1,
19 'disable_existing_loggers': False,
20 'formatters': {
21 'standard': {
22 'format': standard_format
23 },
24 'simple': {
25 'format': simple_format
26 },
27 },
28 'filters': {},
29 'handlers': {
30 # 打印到终端的日志
31 'console': {
32 'level': 'DEBUG',
33 'class': 'logging.StreamHandler', # 打印到屏幕
34 'formatter': 'simple'
35 },
36 # 打印到文件的日志,收集info及以上的日志
37 'default': {
38 'level': 'DEBUG',
39 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
40 'formatter': 'standard',
41 'filename': logfile_path, # 日志文件
42 'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
43 'backupCount': 5,
44 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
45 },
46
47 },
48 'loggers': {
49 # logging.getLogger(__name__)拿到的logger配置
50 '': {
51 'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
52 'level': 'INFO',
53 'propagate': True, # 向上(更高level的logger)传递
54 },
55 },
56 }
网友评论