だけLogRecord
を色付けすることを意味する場合は、ANSIエスケープコードでsettings.py
でLOG_FORMAT
をカスタマイズすることができます。
例:
LOG_FORMAT = '\x1b[0;0;34m%(asctime)s\x1b[0;0m \x1b[0;0;36m[%(name)s]\x1b[0;0m \x1b[0;0;31m%(levelname)s\x1b[0;0m: %(message)s'
あなたはまた、異なる色で異なるログレベルを色付けしたい場合は、scrapy.utils.log._get_handler
(source code)をオーバーライドすることができます。それは何あなたのsettings.py
import scrapy.utils.log
_get_handler = copy.copy(scrapy.utils.log._get_handler)
def _get_handler_custom(*args, **kwargs):
handler = _get_handler(*args, **kwargs)
handler.setFormatter(your_custom_formatter)
return handler
scrapy.utils.log._get_handler = _get_handler_custom
の上部付近にこれを入れて
は、元_get_handler
を呼び出した後にフォーマッタをリセットし、その後scrapy.utils.log
にそれを再接続です。 これはハックな解決策であり、ベストプラクティスではないかもしれませんが、うまくいくだけです。
これを実現するより適切な方法は、logging.StreamHandler
を上書きすることです。 SOにはa bunch of discussionがあり、正しい方向に導くことができます。
私は私のプロジェクトで使用されている完全な作業コードを提供しています(サードパーティのパッケージcolorlog
が使用中です)。
settings.py
import copy
from colorlog import ColoredFormatter
import scrapy.utils.log
color_formatter = ColoredFormatter(
(
'%(log_color)s%(levelname)-5s%(reset)s '
'%(yellow)s[%(asctime)s]%(reset)s'
'%(white)s %(name)s %(funcName)s %(bold_purple)s:%(lineno)d%(reset)s '
'%(log_color)s%(message)s%(reset)s'
),
datefmt='%y-%m-%d %H:%M:%S',
log_colors={
'DEBUG': 'blue',
'INFO': 'bold_cyan',
'WARNING': 'red',
'ERROR': 'bg_bold_red',
'CRITICAL': 'red,bg_white',
}
)
_get_handler = copy.copy(scrapy.utils.log._get_handler)
def _get_handler_custom(*args, **kwargs):
handler = _get_handler(*args, **kwargs)
handler.setFormatter(color_formatter)
return handler
scrapy.utils.log._get_handler = _get_handler_custom