我希望记录到文件,并在终端窗口中显示相同的信息,但是要用漂亮的颜色(使用colorlog或其他跨平台的日志着色器)。这就是我所拥有的:
import logging
import os
import colorlog
def logger(log_filepath='my_app.log', logger_name='myAppLogger'):
"""Log plain text to file and to terminal with colors"""
logger = logging.getLogger(logger_name)
# Log to file (but not to terminal)
logfile_handler = logging.FileHandler(log_filepath)
plain_formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
logfile_handler.setFormatter(plain_formatter)
logfile_handler.setLevel(logging.DEBUG)
# Logging info level to stdout with colors
terminal_handler = colorlog.StreamHandler()
color_formatter = colorlog.ColoredFormatter(
"%(log_color)s%(levelname)-8s%(reset)s %(asctime)s %(blue)s%(message)s",
datefmt=None,
reset=True,
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red,bg_white',
},
secondary_log_colors={},
style='%'
)
terminal_handler.setLevel(logging.DEBUG)
terminal_handler.setFormatter(color_formatter)
# Add handlers to logger
logger.addHandler(logfile_handler)
logger.addHandler(terminal_handler)
return logger
my_logger = logger()
my_logger.debug('Testing debug')
my_logger.info('Testing info')
my_logger.warning('Testing warning')
my_logger.error('Testing error')
my_logger.critical('Testing critical')
在终端中显示以下内容(带颜色):
^{pr2}$…在日志文件中(没有颜色,只有纯文本):
^{3}$为什么水平不正确?在
您的(原始)代码中有两个问题。第一个是一个小错误,您将
color_formatter
分配给日志处理程序,而不是终端处理程序。在第二个问题是您在终端中没有看到低于
WARNING
级别的日志,这是因为您在终端处理程序上设置了最低日志记录级别,而不是记录器本身。您需要替换:有:
^{pr2}$根据the documentation,默认情况下,loggers被设置为
WARNING
日志级别,如果我的直觉是正确的,那么仅将处理程序设置为较低的日志级别将不起作用,因为处理程序只能处理记录器提供给它的内容-WARNING
级别及以上的日志。在相关问题 更多 >
编程相关推荐