IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Logging et multiprocess [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut Logging et multiprocess
    Bonjour a tous,

    J'ai un petit problème avec l'utilisation du logging python.
    En effet, j'utilise Logging dans un script qui peux être appeler plusieurs fois en simultané.
    Résultat je me retrouve avec plusieurs fichier de log.
    Dans mon code, sa donne des choses de ce type: activity.log, activity.log.1, activity.log.2 , etc....

    Voici l'extrait de mon code qui gère la création du logger.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import logging
    from logging.handlers import RotatingFileHandler
     
    ....
    ....
     
    self.logger = logging.getLogger('myScriptName')
    self.logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s')
    file_handler = RotatingFileHandler(self.logFilePath, 'a', 10000, 1)
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(formatter)
    self.logger.addHandler(file_handler)

    Avez vous une idée de comment ne pas avoir cette "duplication" de log ?
    Savez vous comment faire pour que tout "entre" dans le même log ?

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Généralement on instancie le logger dans __main__, même si ce n'est pas nécessaire. Il suffit alors d'ajouter, dans les scripts importés où les logs sont utilisés, cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import logging
    logger = logging.getLogger(__name__)

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    Je ne comprend pas bien ta réponse.

    En gros, je n'ai qu'un seul fichier avec deux class.
    Ce fichier peux être appeler plusieurs fois simultanément par un autre exécutable.

    Donc j'ai bien un __main__, mais celui ci ne fait que une création d'objet et un appel de methode.
    Donc je ne vois pas trop la différence entre ce que je vais actuellement et ce que tu me dit de faire.

    Voici l'exemple minimal de mon projet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #!/usr/bin/python
     
    import sys
    import os.path
    import os
    import shutil
    import re
    import logging
    from logging.handlers import RotatingFileHandler
    from ftplib import FTP
     
     
    class Toto:
     
    	def __init__(self):
     
    		self.logFilePath = '/data/Videos/activity.log'
     
    		self.logger = logging.getLogger('TOTO')
    		self.logger.setLevel(logging.DEBUG)
    		formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s')
    		file_handler = RotatingFileHandler(self.logFilePath, 'a', 10000, 1)
    		file_handler.setLevel(logging.DEBUG)
    		file_handler.setFormatter(formatter)
    		self.logger.addHandler(file_handler)
     
    	def process(self):
    		self.logger.debug("TEST")
     
     
    if __name__ == '__main__':
     
    	tata = Toto()
    	tata.process()

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par hannibal.76 Voir le message
    ...
    Ce fichier peux être appeler plusieurs fois simultanément par un autre exécutable.
    C'est celui-là qui doit instancier le logger. Il est logique que si tu recrées un logger, celui-ci n'a pas connaissance des précédents et créera systématiquement un nouveau fichier.

    Si ce n'est pas possible, éventuellement ajoute une routine qui supprime les anciens logs.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    J'ai pas les source de l'appelant.

    Je ne comprend pas car lorsque mon script est utilisé plusieurs fois sans simultanéité, le fichier de log est bien mis a jour.
    Mais lorsque mon script est utilisé plusieurs fois en simultané, différent fichier de log son créé.

    Pourtant dans les deux cas, le logger est recréer a chaque fois.

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Qu'est-ce-que tu appelles simultanéité ?

    Si le script est importé le logger est créé mais pas si ses classes, fonctions ou autres sont réutilisés sans un nouvel import.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Log4j]Cherche visualiseur de fichiers logs de log4j
    Par RolandB dans le forum Logging
    Réponses: 9
    Dernier message: 18/03/2009, 15h11
  2. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  3. Supprimer journal de log en SQL
    Par David K. dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 24/07/2003, 08h35
  4. Fichiers de Log
    Par Mouse dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/05/2003, 18h06
  5. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo