少し前に、ログ システム (すべてのメッセージが標準化されていたため) のためと思われる、色付きの出力を持つ Mono アプリケーションを見ました。
現在、Python にはlogging
モジュールがあり、出力をカスタマイズするための多くのオプションを指定できます。そのため、Python でも同様のことが可能だと想像していますが、その方法がどこにも見つかりません。
Pythonlogging
モジュールをカラーで出力する方法はありますか?
たとえば、エラーは赤で、デバッグ メッセージは青または黄色で表示したいなどです。
もちろん、これには互換性のある端末 (最近の端末のほとんどはそうです) が必要になるでしょうが、logging
色がサポートされていない場合は元の出力にフォールバックできます。
ログモジュールを使用して色付きの出力を取得する方法について何かアイデアはありますか?
ベストアンサー1
追加パッケージを必要としないPython 3ソリューション
コミュニティへの注意:回答を編集しないでください。コーディングの点では最適な方法ではないことは承知していますが、プロセスの本質を理解するには最も理解しやすく読みやすい方法です。
1. クラスを定義する
import logging
class CustomFormatter(logging.Formatter):
grey = "\x1b[38;20m"
yellow = "\x1b[33;20m"
red = "\x1b[31;20m"
bold_red = "\x1b[31;1m"
reset = "\x1b[0m"
format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)"
FORMATS = {
logging.DEBUG: grey + format + reset,
logging.INFO: grey + format + reset,
logging.WARNING: yellow + format + reset,
logging.ERROR: red + format + reset,
logging.CRITICAL: bold_red + format + reset
}
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt)
return formatter.format(record)
2. ロガーをインスタンス化する:
# create logger with 'spam_application'
logger = logging.getLogger("My_app")
logger.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(CustomFormatter())
logger.addHandler(ch)
3. そして以下を使用します:
logger.debug("debug message")
logger.info("info message")
logger.warning("warning message")
logger.error("error message")
logger.critical("critical message")
結果:
完全なカラースキーム:
Windowsの場合:
このソリューションは、Mac OS、IDE ターミナルで機能します。Windows コマンド プロンプトには、デフォルトでは色がまったくないようです。有効にする方法については、こちらを参照してください。まだ試していません。https://www.howtogeek.com/322432/how-to-customize-your-command-prompts-color-scheme-with-microsofts-colortool/