文本/控制台
有以下两个包用于彩色输出.
termcolor
推荐用于控制台输出, 简单的颜色输出, 第二个参数为颜色类型,对应 termcolor.COLORS
1
2
3
4
from termcolor import colored
print(colored('hello', 'red'), colored('world', 'green'))
#>>> hello world
colorama
1
2
3
from colorama import Fore, Style
print(f'This is {Fore.GREEN}color{Style.RESET_ALL}!')
#>>> This is color!
日志 colorlog
日志样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import colorlog
handler = colorlog.StreamHandler()
handler.setFormatter(colorlog.ColoredFormatter(
'%(log_color)s%(asctime)s [%(levelname)8s]%(name)s:%(message)s'
))
logger = colorlog.getLogger('example')
logger.addHandler(handler)
# 使用
logger.debug(" 这是 DEBUG 级别的日志 ")
logger.info(" 这是 INFO 级别的日志 ")
logger.warn(" 这是 WARNING 级别的日志 ")
logger.error(" 这是 ERROR 级别的日志 ")
logger.critical(" 这是 CRITICAL 级别的日志 ")
# debug / info 默认未开启
#>>> 2020-01-01 00:00:00,001 [ WARNING]: 这是 WARNING 级别的日志
#>>> 2020-01-01 00:00:00,001 [ ERROR]: 这是 ERROR 级别的日志
#>>> 2020-01-01 00:00:00,001 [CRITICAL]: 这是 CRITICAL 级别的日志
Django日志样例
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
46
47
48
49
50
# ...
# 日志颜色配置
LOG_COLORS_CONFIG = {
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red',
}
# BASE_DIR 为Django工程目录
# 日志配置配置
LOGGER_FILE_PATH = f'{BASE_DIR}/logs/logging.log'
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'class': 'colorlog.ColoredFormatter',
'format': '%(log_color)s%(asctime)s [%(levelname)s %(module)s %(process)d %(thread)d] %(message)s',
'log_colors': LOG_COLORS_CONFIG,
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
},
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': LOGGER_FILE_PATH,
'when': 'midnight', # 天
'interval': 1,
'backupCount': 365, # 保留一年
'formatter': 'verbose',
'encoding': 'utf-8', # 编码utf-8
}
},
'loggers': {
'django': {
'handlers': ['console', 'file'], # 在文件和控制台打印
'level': 'DEBUG',
'propagate': True,
},
},
}