1
我希望登錄到文件以及在終端窗口中顯示相同的信息,但顏色很好(使用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')
這使我在終端下面的(顏色):
WARNING 2017-01-23 20:30:55,180 Testing warning
ERROR 2017-01-23 20:30:55,180 Testing error
CRITICAL 2017-01-23 20:30:55,181 Testing critical
...這在日誌文件中(沒有顏色,只是純文本) :
2017-01-23 20:30:55,180 WARNING Testing warning
2017-01-23 20:30:55,180 ERROR Testing error
2017-01-23 20:30:55,181 CRITICAL Testing critical
爲什麼級別不正確?
爲什麼'logfile_handler'使用'color_formatter'而不是'terminal_handler'? – Tagc
謝謝 - 就是這樣。但關卡的水平呢? (更新了問題) – fredrik
至於關卡,你需要設置'logger.setLevel(logging.DEBUG)'而不是'terminal_handler.setLevel ...'。我有一個想法,爲什麼這可能是這種情況,但我會確認,然後作爲答案張貼。 – Tagc