Partage
  • Partager sur Facebook
  • Partager sur Twitter

Logging module, funcName, appelé d'une fonction

    20 mai 2024 à 4:36:33

    Bonjour à vous.

    Je suis entrain de remettre mes modules à jours.

    J'ai 2 modules, concernant logging et print.

    Je me suis aperçus, que je pouvais mettre funcName et module, dans le FORMAT, de logging.

    "%(asctime)s - [%(module)s] - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d => %(message)s",

    J'avais jamais utilisé "funcNam", mais dernièrement, j'ai eu quelque soucis avec un programme. Et savoir la fonction et le numéro de ligne de l'erreur, aurait été très pratique. C'est pour cela que j'aimerais l'inclure dans mon "FORMAT"

    Malheureusement, puisque logging est appelé d'un autre module (et d'une autre classe), le funcName et module, n'est pas le bon, dans le fichier log.

    Dans la documentation, "funcName" est la fonction auquel il est appeler (ce qui est logique). Mais peut-on modifier cela?

    J'ai beaucoup de modules, qui utilisent ces "scripts". Je pensais qu'en mettant les print avec les logging, était une bonne idée. À la place de toujours écrire ceci:

    print("text")
    logger.log(1, "blablabla")

    Y a t'il un moyen de modifier le FORMAT, ou de trouver la bonne fonction, du bon fichier, de la bonne classes? :-°

    Puisque mes modules, sont assez compliqués et pas necessaire à mon problème;

    Voici un petit exemple, très simple:

    import os
    import logging
    
    
    DOSSIER = os.path.dirname(os.path.realpath(__file__))
    LOG_FILE = os.path.join(DOSSIER, "test.log")
    
    
    # File: MyLogging.py
    class Logging(object):
        def __init__(self, file: str,
                     filemode: str = "a",
                     level: int = 0,
                     format: str = "%(asctime)s - [%(module)s] - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d => %(message)s",
                     datefmt: str = '%d/%m/%Y %I:%M:%S %p',
                     ):
    
            logging.basicConfig(
                filename=file,
                filemode=filemode,
                format=format,
                datefmt=datefmt,
                level=level
            )
    
        def get_logger(self, name: str):
            return self.__create_logger(name, 0)
    
        def __create_logger(self, name: str, level: int):
            logger = logging.getLogger(name)
            logger.setLevel(level)
            return logger
    
        def log(self, name, text):
            logger = self.get_logger(name)
            logger.log(1, msg=text)
    
    
    # File: MyPrinting.py
    class Printing(object):
        def __init__(self):
            self.cls_logging = Logging(LOG_FILE)
    
        def printing(self, name, text):
            print(text)
            self.cls_logging.log(name, text)
    
    
    # File: MyClass.py
    class MyClass(object):
        def __init__(self):
            self.cls_printing = Printing()
    
        def akuna(self):
            self.cls_printing.printing(f"{__name__}.{self.__class__.__name__}", "text 123")
    
    
    if __name__ == '__main__':
        cls_c = MyClass()
        cls_c.akuna()

    Dans le fichier .LOG;

    19/05/2024 10:24:42 PM - [Logging] - passraport.MyClass.MyClass - Level 1 - log:30 => text 123

    "module" devrait être "MyClass" (mais puisqu'il est appelé via le fichier(module) "Logging", c'est lui qui est écrit)
    "funcName" devrait être "akuna" (mais puisqu'il est appeler via "Logging.log", c'est lui qui est écrit)

    Comment puis-je faire, pour que les bons modules/funcName, soit "invoker" au bon endroit?

    ** Pour l'instant j'utilise le "TEXT" afin d'identifier les fonctions. Ce qui n'est pas génial.

    printing(f"{__name__}.{self.__class__.__name__}.akuna", "text 123")

    Merci pour votre aide.

    NLT



    -
    Edité par nolimitech 20 mai 2024 à 4:38:24

    • Partager sur Facebook
    • Partager sur Twitter

    Logging module, funcName, appelé d'une fonction

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown