2016-04-11 2 views
1

I Pythons builtin logging ModulHinzufügen chromalog zu STDOUT und Dateiprotokollierung

# create logger with 'spam_application' 
logger = logging.getLogger('spam_application') 
# create file handler which logs even debug messages 
fh = logging.FileHandler('spam.log') 
fh.setLevel(logging.DEBUG) 
logger.addHandler(fh) 
logger.info('information!2') # this DOES go to both STDOUT and the FILE. but how to chromalog it??? 

Die schöne an dieser Einstellung bin ist, dass der Ausgang druckt zum Terminal UND in die Datei spam.log. Jetzt möchte ich chromalog in dieses einstecken, um Farbausgaben zum Terminal zu erhalten. Normalerweise Leider würde ich dies tun, indem Sie die oben mit

chromalog.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s line %(lineno)d %(levelname)s: %(message)s', datefmt='%Y-%m-%d at %I:%M %p and %S secs') 

prefacing, denke ich chromalog erkennt, dass die Ausgabe in eine Datei wird und schaltet sich aus Farbe. Es wäre ideal, wenn chromalog die Farbe für die Terminalausgänge aktivieren und die Farbe für die Dateiausgänge ausschalten könnte.

Ist das möglich? Wie würde ich das tun? P.S. Ich bin offen für eine Alternative zu Chromalog.

Antwort

1

Ich denke, es ist mit den Standardfarben für INFO zu tun. Dieses Skript:

import logging 

import chromalog 

logger = logging.getLogger('foo') 

chromalog.basicConfig(level=logging.DEBUG, format='%(asctime)s %(message)s') 
fh = logging.FileHandler('foo.log') 
logger.addHandler(fh) 
logger.warning('warning!') 

liefert farbige Ausgabe:

enter image description here

Die Protokolldatei enthält uncolourised Ausgabe:

$ cat foo.log 
warning! 
+0

Danke! Ja, es scheint, dass die Standardfarbe der .info() -Methode für mich nicht farbig ist. – mareoraft

0

Hier ist eine Lösung, die colorlog statt chromalog verwendet:

import logging 
import colorlog 

FORMAT_TEMPLATE = '%(asctime)s %(filename)s line %(lineno)d {}%(levelname)s{}: {}%(message)s' 
FORMAT = FORMAT_TEMPLATE.format() 
FORMAT_COLOR = FORMAT_TEMPLATE.format('%(log_color)s', '%(reset)s', '%(message_log_color)s') 

logger = logging.getLogger(name) 
logger.setLevel(logging.DEBUG) # if you want to see more than just warnings, remember this!! You can also set this option to a HANDLER if you want that handler to be at a different level. 

# create an output to the terminal: 
stdout_handler = logging.StreamHandler() 
stdout_handler.setFormatter(
    colorlog.ColoredFormatter(
     FORMAT_COLOR, 
     log_colors={ 
      'DEBUG': 'cyan', 
      'INFO':  'green', 
      'WARNING': 'yellow', 
      'ERROR': 'red', 
      'CRITICAL': 'red,bg_white', 
     }, 
    ) 
) 
logger.addHandler(stdout_handler) 

# create an output to a file: 
fh = logging.FileHandler('mylog.log') 
fh.setFormatter(
    logging.Formatter(
     FORMAT, 
    ) 
) 
logger.addHandler(fh) 

# ready to use!: 
logger.debug('hi-ho!') 

Hier erstellen wir einen Handler für jeden Ausgang, den wir wollen. Dies gibt mehr Kontrolle und die Möglichkeit, verschiedene Formatierungsoptionen für jede Ausgabe zu verwenden.