python logging szinezes

 ( battila | 2019. május 17., péntek - 13:36 )

Hello,


#!/usr/bin/env python

import logging
from termcolor import colored

logging.addLevelName(logging.getLevelName('WARNING'),colored('WARNING','yellow'))

logging.basicConfig(
format='%(asctime)s - %(levelname)-8s - %(message)s',
level=logging.DEBUG,
datefmt='%Y-%m-%d %H:%M:%S')

logging.warning('Lorem ipsum dolor sit amet')
logging.info('Lorem ipsum dolor sit amet')


$ ./naplozas_szinnezes_teszt.py
2019-05-17 11:57:21 - WARNING - Lorem ipsum dolor sit amet
2019-05-17 11:57:21 - INFO - Lorem ipsum dolor sit amet
$

A szinezestol elcsuszik az szoveg pozicio. Egyelore nem nagyon jottem ra, hogy hogyan lehetne megcsinalni. Keresgeltem is, de meg nem akaedtam a nyomara sajnos.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A "-8s" legalább 8 byte-ot (python2) / karaktert (python3) ír ki, szóközökkel kiegészítve a sztringet ha kell. A terminálra színezés eredménye egy olyan sztring, amely színező escape szekvenciákat tartalmaz, jelen esetben konkrétan "\e[33mWARNING\e[0m", bőven több mint 8 karakter, tehát már nem rak utána szóközt.

Hogy hogyan lehetne értelmesen megcsinálni? Mérd le a sztring hosszát még a színezés előtt. Sőt, inkább ne is a hosszát, hanem a terminálban szélességét (wcswidth), ami nem mindig ugyanaz. És kézzel egészítsd ki a megfelelő számú szóközzel. Vagy a színező escape szekvenciákat cipeld külön a levelname sztringtől.

Hmm, lehet, hogy ha az egesz sort szinezem, akkor az is megoldas lehet.