coloredlogsというモジュールを使用する。
pip install coloredlogs
単純なPRINTの色付け
import logging
import coloredlogs
class bcolors:
# https://godoc.org/github.com/whitedevops/colors
BGRED = '\033[41m'
BGGREEN = '\033[42m'
BGYELLOW = '\033[43m'
BGBLUE = '\033[44m'
BGMAGENDA = '\033[45m'
BGCYAN = '\033[46m'
RED = '\033[91m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
BLUE = '\033[94m'
MAGENDA = '\033[95m'
CYAN = '\033[96m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
logger = logging.getLogger()
coloredlogs.install(level='DEBUG', logger=logger)
print(bcolors.BLUE + "------- Colored STDOUT Test -------" + bcolors.ENDC)
これで色付けされて出力されるはず。部分的な色付けも可能。
loggerとの組み合わせ
loggerと組み合わせて、ファイルに書き込みつつ、標準出力にも出す。
import logging
import coloredlogs
coloredlogs.CAN_USE_BOLD_FONT = True
coloredlogs.DEFAULT_FIELD_STYLES = {'asctime': {'color': 'green'},
'hostname': {'color': 'magenta'},
'levelname': {'color': 'black', 'bold': True},
'name': {'color': 'blue'},
'programname': {'color': 'cyan'}
}
coloredlogs.DEFAULT_LEVEL_STYLES = {'critical': {'color': 'red', 'bold': True},
'error': {'color': 'red'},
'warning': {'color': 'yellow'},
'notice': {'color': 'magenta'},
'info': {},
'debug': {'color': 'green'},
'spam': {'color': 'green', 'faint': True},
'success': {'color': 'green', 'bold': True},
'verbose': {'color': 'blue'}
}
logger = logging.getLogger(__file__)
coloredlogs.install(level='INFO', logger=logger, fmt='%(asctime)s : %(message)s', datefmt='%Y/%m/%d %H:%M:%S')
handler = logging.FileHandler('output.log', 'w', 'utf-8')
handler.setFormatter(logging.Formatter('%(asctime)s : %(levelname)s : %(message)s', datefmt='%Y/%m/%d %H:%M:%S'))
logger.addHandler(handler)
logger.error("This is ERROR!")
logger.warning("This is WARNING.")
logger.info("This is INFO.")
logger.debug("This is DEBUG..") # Not Printed
DEFAULT_FIELD_STYLES、DEFAULT_LEVEL_STYLESを変更することで、特定の部分やログのレベルの色を変更することが可能。
デフォルト値などは以下のリンクを参照。
https://coloredlogs.readthedocs.io/en/latest/api.html#id24
課題
色+太字(color and bold)も可能らしいが、できない。
print(bcolors.BLUE + bcolors.BOLD +"------- Colored STDOUT Test -------" + bcolors.ENDC)
ただの青になる…
BOLDBLUE = '\033[1;94m'
print(bcolors.BOLDBLUE + "------- Colored STDOUT Test -------" + bcolors.ENDC)
ただの青になる…
>>> RED = '\033[91m'
>>> BOLD = '\033[1m'
>>> ENDC = '\033[0m'
>>> print(RED+'TEST'+ENDC)
TEST
>>> print(RED+BOLD+'TEST'+ENDC)
TEST
ここだと表現できないが、インタープリタで上記ならOK。調査中。
出力を標準出力にしたい
coloredlogs.installを行うとデフォルトではstderrがハンドラとして自動的に追加されるらしい。
そのため、正確にはこれは標準エラー出力に出ていると思うのだが、stream=sys.stdoutを指定すると、コンソール実行の場合うまく色がつかない…。調査中。