Faire un log avec le n° de lignes d'erreurs - Python

Bonjour,

Je suis en train de finir mon petit soft et pour surveiller son comportement j’ai mis un log.

je rempli actuellement ce log, pas de pbm.

j’ai cherché sur le net comment faire pour afficher le n° des lignes où se trouvent les erreur. J’ai bien sur commencé par l’écrire à la main, mais quand on ajoute ou enlève des lignes, ça change…

j’ai trouvé ce code ; [Python 3.X] Comment récupérer le numéro de ligne en cours d’exécution dans le script - Python


import inspect
inspect.getsource(os)

==========code============

lineno = lambda: inspect.currentframe().f_back.f_lineno
mytest = lineno() 
mytest = mytest + 'mon erreur'
#appel de la fonction log
ecrirelog(mytext)


def écrirelog(mytext):
	openfile ,a etc.
	file.write(mytext + txt + '\n')
	file.close

========================

ce code fonctionne sur mon projet et fourni un log parfait depuis pycharm (PyCharm 2021.3.2 (Community Edition)) Runtime version: 11.0.13+7-b1751.25 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.):

150 mon erreur, mon text (par exemple)

Mais une fois l’applicatif créé (je crée l’appli avec cx_freeze), ça ne fonctionne pas : l’appli ne démarre pas. je précise que l’appli compilée sans cette partie (que je viens de rajouter) fonctionne parfaitement sur 2 pc différents. (w10 et w11) .

j’ai remis l’ancienne façon de faire le log avec un time stamp des infos.

c’est dommage, car ça fait un log plus facile à lire et plus sympa à débuger…

qui sait comment faire un log avec les numéros de ligne ?

J’ai pas mal cherché et j’ai aussi trouvé des trucs très compliqués ou pas pour python…

Qui aurait une idée simple?

d’avance merci,
jym83

Essayer cette exemple, tous les logs seront affichés et également écrits dans un fichier nommé mylogs.log.

import logging
import sys

logger = logging.getLogger()
logger.setLevel(logging.INFO)
formatter = logging.Formatter('[%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s')

file_handler = logging.FileHandler('mylogs.log')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)

logger.addHandler(file_handler)

Exemple d’utilisation :

logger.error('Ceci est un message d\'erreur.')

Sortie:

[myscript.py:150 -     myFunction() ] Ceci est un message d'erreur.

Bonjour @jym83,

Je suis là pour vous aider. En Python 3, vous pouvez essayer le code suivant:

def Deb(msg = None):
  print(f"Debug {sys._getframe().f_back.f_lineno}: {msg if msg is not None else ''}")

Dans le code, vous pouvez alors utiliser :

Deb("Message de débogage!")

Cela produit le résultat suivant:

190: Message de débogage!

C’est un peut contradictoire

Précisez-nous exactement où le problème ou l’erreur que vous avez.

Super, Merci,
je n’étais pas arrivé à faire fonctionner avec logging. Votre syntaxe est complètement différente de ce que j’avais.
c’est très complet comme ligne d’info et en plus ça passe à la compilation.

Merci beaucoup Anonymous.

Bonjour jacques,
merci de votre aide.
c’est le code le plus concis et le plus simple que j’ai vu sur ce sujet.

j’ai mis la commande comme ça pour tester :

Deb("Message de débogage! de chez jacques" + '\n')

et j’ai modifié la fonction comme ça :

def Deb(msg = None):
    print(f"Debug {sys._getframe().f_back.f_lineno}: {msg if msg is not None else ''}")
    mytxt = f"Debug {sys._getframe().f_back.f_lineno}: {msg if msg is not None else ''}"
    file = open("log_archives.txt", "a")
    file.write(mytxt)
    file.close()

et ça se compile impeccable.
Super merci.

Bonjour Michel,

je n’ai pas d’erreur. le code fonctionne et en mode « développement » (depuis pycharm) tout marche. j’ai bien le fichier log.
Mais une fois compilé, l’appli ne se lance mm pas, j’ai juste la fenêtre DOS 1/2 seconde. je pense que le module « inspect » coince avec le compilateur.

Anonymous et jacques m’ont débloqué sur ce point.

Merci de votre réponse.
jym83

Super :tada:. Bon courage.