Je veux créer un enregistreur multiligne à l'aide du module de journalisation python. Lorsque j'utilise l'extrait de code ci-dessous pour formater l'enregistreur:

import logging
logger = logging.getLogger(file_name)
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
logger.addHandler(ch)

J'obtiens la sortie ci-dessous pour les journaux multilignes lorsque j'utilise logger.info ("" "ligne 1 \ nline 2 \ n ligne 3" "")

2017-07-20 13:21:14,754 - my_logger.py - INFO - line 1
line 2
line 3

Je veux ma sortie comme ci-dessous:

2017-07-20 13:21:14,754 - my_logger.py - INFO - line 1
2017-07-20 13:21:14,754 - my_logger.py - INFO - line 2
2017-07-20 13:21:14,754 - my_logger.py - INFO - line 3
1
pankmish 20 juil. 2017 à 16:55

2 réponses

Meilleure réponse

Vous pouvez créer votre propre formateur:

import logging
class MultilineFormatter(logging.Formatter):
    def format(self, record: logging.LogRecord):
        save_msg = record.msg
        output = ""
        for line in save_msg.splitlines():
            record.msg = line
            output += super().format(record) + "\n"
        record.msg = save_msg
        record.message = output
        return output

Ensuite, modifiez l'initialisation de votre enregistreur comme suit:

formatter = MultilineFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
4
Qeek 20 juil. 2017 à 14:32

Réponse courte, vous ne pouvez pas. Voici ce que vous pouvez faire:

logger.info('line 1')
logger.info('line 2')
logger.info('line 3')

Ou si vous avez des éléments sur plusieurs lignes, vous pouvez faire:

map(logger.info, 'line 1\nline 2\nline 3'.split('\n'))

Ceux-ci n'apparaîtront pas en même temps, mais seront très proches ...

0
ssm 20 juil. 2017 à 14:27