1 import os
2
3 # 1、定义三种日志输出格式,日志中可能用到的格式化串如下
4 # %(name)s Logger的名字
5 # %(levelno)s 数字形式的日志级别
6 # %(levelname)s 文本形式的日志级别
7 # %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
8 # %(filename)s 调用日志输出函数的模块的文件名
9 # %(module)s 调用日志输出函数的模块名
10 # %(funcName)s 调用日志输出函数的函数名
11 # %(lineno)d 调用日志输出函数的语句所在的代码行
12 # %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
13 # %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
14 # %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
15 # %(thread)d 线程ID。可能没有
16 # %(threadName)s 线程名。可能没有
17 # %(process)d 进程ID。可能没有
18 # %(message)s用户输出的消息
19
20 # 2、强调:其中的%(name)s为getlogger时指定的名字
21 standard_format = '[%(asctime)s] [%(threadName)s:%(thread)d] [log_id:%(name)s] [%(filename)s:%(lineno)d] ' \
22 '[%(levelname)s] [%(message)s]'
23 simple_format = '[%(levelname)s] [%(asctime)s] [%(filename)s:%(lineno)d] [%(message)s]'
24 test_format = '[%(asctime)s] [%(message)s]'
25
26 # 3、日志配置字典
27 # 可以定制日志文件路径
28 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # log文件的目录
29 LOG_PATH = os.path.join(BASE_DIR, 'log', 'log1.log')
30 LOG_PATH2 = os.path.join(BASE_DIR, 'log', 'log2.log')
31 LOGGING_DIC = {
32 'version': 1,
33 'disable_existing_loggers': False,
34 'formatters': {
35 'standard': {
36 'format': standard_format
37 },
38 'simple': {
39 'format': simple_format
40 },
41 'test': {
42 'format': test_format
43 },
44 },
45 'filters': {},
46 'handlers': {
47 # 打印到终端的日志
48 'console': {
49 'level': 'DEBUG',
50 'class': 'logging.StreamHandler', # 打印到屏幕
51 'formatter': 'simple'
52 },
53 # 打印到文件的日志,收集info及以上的日志
54 'default': {
55 'level': 'DEBUG',
56 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,日志轮转
57 'formatter': 'standard',
58 'filename': LOG_PATH, # 日志文件
59 'maxBytes': 1024 * 1024 * 10, # 日志大小 10M
60 'backupCount': 20000, # 备份日志文件最大数
61 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
62 },
63 'other': {
64 'level': 'DEBUG',
65 'class': 'logging.FileHandler', # 保存到文件
66 'formatter': 'test',
67 'filename': LOG_PATH2,
68 'encoding': 'utf-8',
69 },
70 },
71 'loggers': {
72 # logging.getLogger(__name__)拿到的logger配置
73 '': {
74 'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
75 'level': 'DEBUG', # loggers(第一层日志级别关限制)--->handlers(第二层日志级别关卡限制)
76 'propagate': False, # 默认为True,向上(更高level的logger)传递,通常设置为False即可,否则会一份日志向上层层传递
77 },
78 '测试_console': {
79 'handlers': ['console', ],
80 'level': 'DEBUG',
81 'propagate': False,
82 },
83 '测试_other': {
84 'handlers': ['other', ],
85 'level': 'DEBUG',
86 'propagate': False,
87 },
88 },
89 }