web-dev-qa-db-fra.com

Python: Comment créer un fichier journal tous les jours en utilisant le module de journalisation?

Je suis nouveau sur le module de journalisation de python. Je souhaite créer un nouveau fichier journal tous les jours lorsque mon application est en cours d'exécution.

log file name - my_app_20170622.log
log file entries within time - 00:00:01 to 23:59:59

Le lendemain, je veux créer un nouveau fichier journal avec la date du lendemain -

log file name - my_app_20170623.log
log file entries within time - 00:00:01 to 23:59:59

J'utilise le module de journalisation de python. 

J'utilise comme ci-dessous - 

log_level = int(log_level)
logger = logging.getLogger('simple')
logger.setLevel(log_level)
fh = logging.FileHandler(log_file_name)
fh.setLevel(log_level)
formatter = logging.Formatter(log_format)
fh.setFormatter(formatter)
logger.addHandler(fh)

Existe-t-il des configurations dans le module de journalisation de python pour créer un journal au quotidien?

6
kit

Vous devez créer une TimedRotatingFileHandler:

from logging.handlers import TimedRotatingFileHandler
logname = "my_app.log"
handler = TimedRotatingFileHandler(logname, when="midnight", interval=1)
handler.suffix = "%Y%m%d"
logger.addHandler(handler)

Ce morceau de code créera un my_app.log mais le journal sera déplacé vers un nouveau fichier journal nommé my_app.log.20170623 lorsque le jour actuel se terminera à minuit.

J'espère que ça aide.

10
Adrian Antunez

Enfin, j'ai la bonne réponse et je veux partager cette réponse.

Fondamentalement, il faut créer un TimedRotatingFileHandler comme ci-dessous -

log_format = "%(asctime)s - %(levelname)s - %(message)s"
log_level = 10
handler = TimedRotatingFileHandler("my_app.log", when="midnight", interval=1)
handler.setLevel(log_level)
formatter = logging.Formatter(log_format)
handler.setFormatter(formatter)

# add a suffix which you want
handler.suffix = "%Y%m%d"

#need to change the extMatch variable to match the suffix for it
handler.extMatch = re.compile(r"^\d{8}$") 

# finally add handler to logger    
logger.addHandler(handler)

Ce code ci-dessus générera un fichier tel que my_app.log pour le jour actuel et my_app.log.20170704 pour le jour précédent.

J'espère que ça aide.

2
kit

Je vous suggère d’examiner le logging.handlers.TimedRotatingFileHandler. Je pense que c’est ce que vous recherchez.

0
Marc Z