2016-06-17 2 views
0

Je souhaite enregistrer une ligne décrivant les informations de journalisation pour chaque fichier journal créé par l'enregistreur. Actuellement, j'utilise un processus de journalisation séparé qui sera exécuté tout le temps. Il reçoit les informations d'une file d'attente et les écrit dans le journal. Beaucoup de modules transmettront des informations à cette file d'attente de journalisation.Effectuer une action chaque fois qu'un journal est pivoté en python

Mon code d'échantillonnage est:

import logging 
import time 

from logging.handlers import TimedRotatingFileHandler as rotate 

def info_log(log_queue): 
    logger = logging.getLogger("My Log") 
    logger.setLevel(logging.INFO) 

    handler = rotate("log/info.log", when="D", interval=30, backupCount=13) 
    logger.addHandler(handler) 

    desc_string = "yyyy/mm/dd-HH:MM:SS \t name \t country \n" 
    logger.info(desc_string) 

    while True: 
     result=log_queue.get().split("#") 
     logger.info(result[0] + "\t" result[1] + "\t" + result[2] + "\n") 

Chaque fois que le journal est mis en rotation, je veux desc_string à écrire 1er au fichier journal.
Comment puis-je faire ça? Ou, en d'autres termes, comment savoir dans le programme quand un journal est pivoté?

Répondre

1

Peut-être que vous pouvez simplement remplacer la méthode doRollover de TimedRotatingFileHandler?

class CustomFileHandler(TimedRotatingFileHandler): 
    def doRollover(self): 
    super().doRollover() 
    self.stream.write(desc_string) 

# to use it 
handler = CustomFileHandler("log/info.log", when="D", interval=30, backupCount=13) 
logger.addHandler(handler) 
+0

On dirait que ça va faire l'affaire. Je l'ai essayé et il montre une erreur, 'super() prend au moins 1 argument. Aucun donné. – RatDon

+1

Ceci est une syntaxe Python 3: si vous êtes sur Python 2, la syntaxe est 'super (CustomFileHandler, self) .doRollover()' – gbin