Cum să vă conectați folosind un formatorului la dosar și utilizarea formatorului colorate la terminalul?

voturi
1

Mi - aș dori să vă conectați la dosar precum și arată aceleași informații în fereastra terminalului, dar cu culori frumoase (folosind colorlog sau alte cross-platform log Colorizer). Aceasta este ceea ce am:

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')

Acest lucru îmi dă următoarele în terminalul (cu culori):

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

... și acest lucru în fișierul jurnal (fără culori, doar text simplu):

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

De ce este nivelul nu este corect, deși?

Întrebat 23/01/2017 la 19:28
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
1

Există două aspecte în cod (original). Prima a fost o eroare minoră în care l- ați atribuit color_formatterla log handler , în loc de tratare a terminalului.

A doua problemă - că nu ați fost văzut logs sub WARNINGnivelul din terminalul - a fost cauzată de faptul că ați fost stabilirea nivelului minim de logare pe terminalul handler dar nu logger în sine . Trebuie să înlocuiți:

terminal_handler.setLevel(logging.DEBUG)

Cu:

logger.setLevel(logging.DEBUG)

Conform documentației , exploatare sunt setate pentru a WARNINGvă conecta la nivel implicit, și dacă intuiția mea este corectă , atunci doar setarea handler la un nivel inferior jurnal nu ar funcționa , deoarece handlerul poate procesa doar ceea ce - l hrănește oricum logger - WARNINGjurnalele și nivelul doi de mai sus.

Publicat 23/01/2017 la 19:45
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more