web-dev-qa-db-fra.com

Journalisation Python: créer un journal s’il n’existe pas ou ouvrir et poursuivre la journalisation s’il en existe

J'écris un code qui utilise le système python loggingname__. L'idée est que, si LOGn'existe pas déjà, créez le journal, mais si c'est le cas, récupérez-le et reprenez la journalisation dans ce fichier. Voici mon code:

import logging
import os

log_filename='Transactions.log')
if os.path.isfile(log_filename)!=True:
    LOG = logging.getLogger('log_filename')
    LOG.setLevel(logging.DEBUG)
    # create file handler which logs even debug messages
    fh = logging.FileHandler('log_filename')
    fh.setLevel(logging.DEBUG)
    # create console handler with a higher log level
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    # create formatter and add it to the handlers
    formatter = logging.Formatter('-->%(asctime)s - %(name)s:%(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    # add the handlers to the logger
    LOG.addHandler(fh)
    LOG.addHandler(ch)
else:
    LOG=logging.getLogger()

Je soupçonne que le problème vient de mon bloc elsemais je ne sais pas comment le réparer. Quelqu'un pourrait-il nous éclairer sur cette situation?.

7
CiaranWelsh

La variable FileHandler du module de journalisation s'en charge pour vous. Pas besoin de complexité.

Le gestionnaire utilise un paramètre mode facultatif pour spécifier s'il commence à écrire ou à y ajouter des données.

De les docs :

class logging.FileHandler(filename, mode='a', encoding=None, delay=False)

Le fichier spécifié est ouvert et utilisé comme flux pour la journalisation. Si mode n'est pas spécifié, 'a' est utilisé.

7
hjpotter92

Quand tu cours 

LOG = logging.getLogger('log_filename')

pour la première fois, une variable globale est créée. Vous pouvez donc également ajouter le code suivant au script ci-dessus:

global LOG
if LOG is not None:
    print("found logger !")
else:
    ("no global variable logger found")
0
Angelo