Salut à tous,
Salut Julien :-)

Quoting "Julien L." <[EMAIL PROTECTED]>:

- actuellement, le développeur doit fixer le niveau de détail du
message qu'il veut afficher.

Tout à fait.

J'ai l'impression que votre solution consiste à "déplacer" le niveau
de détail fixé par le développeur pour qu'elle suive la logique de
l'exécution (appel d'une commande à partir d'un module, ...).

Le développeur se casse donc la tête à fixe un niveau de détail pour
le voir ensuite modifier. A vrai dire, cela me paraît "bizarre" comme
fonctionnement.

Ce qui est important pour un développeur c'est pas tant de définir le niveau
entre les modules/commandes que de le définir au sein d'une même
commande/module.
C'est vraiment ça qui est important. Le but est de respecter la hierarchie des
messages au sein d'un même module/commande, ceci relativement au context dans
lequel il est utilisé. c'est au développeur de le définir la hiearchie au sein
d'une commande/module.

Après c'est à print_msg et au module/commande père/mère de décider si les
messages des modules/commandes filles doivent être considéré comme un niveau
inférieur ou égale à ses propres messages.


- l'affichage complet du message se décompose en deux appels de
fonctions. Le premier appel est celui de l'affichage du message
(print_msg). En quelque sorte, cet appel de fonction "ouvre" le
message. Le deuxième appel est celui de l'affichage du résultat du
message (print_status). En quelque sorte, cet appel de fonction
"ferme" le message.

Non, ce n'est pas toujours le cas. un print_msg n'est pas forcément
suivit d'un
print_status.

Exemple :

print_msg WARNING "Some nbuilds are not up to date. You should run Ncooker
update to have the latest version" (message fictif)

Donneras l'affichage suivant :

Some nbuilds are not up to date. You should run Ncooker update to have the
latest version

print_msg INFO "Downloading foobar..."

Donneras l'affichage suivant :

Downloading foobar...

Ensuite dans le code si tu fais:
print_status INFO OK
alors le message précédent sera transformé et deviendra :

Downloading foobar......................... [OK]

Ce que fait print_status c'est juste ajouter des .... et mettre le statut à la
fin d'une ligne.

Si un développeur fait par erreur :

print_message ERROR "Your nbuild is corrupted"
[plusieurs lignes de code]
print_status OK

Alors l'affichage final sera :

Your nbuild is corrupted.................. [OK]

Ce qui n'est pas du tout l'effet voulu


Partant de ces remarques, mon idée est la suivante.

La fonction print_msg ne prend plus qu'un seul argument : le message.
Le niveau de détail, trop subjectif et surtout trop relatif aux
autres messages, sera calculé par le gestionnaire de messages.

Je complète ce que j'ai dit plus haut : le niveau de détail n'est pas (ou peu)
subjectif. Un développeur peut résonnablement définir au sein d'une même
commande ce qui est de l'info, du détail et du super détail. Par contre il ne
peut pas prévoir à l'avance si la commande qu'il code sera utilisée au premier
niveau ou dans un niveau de détail.

Lorsque print_msg est appelé, le message passé en argument est
affiché (avec la bonne indentation) et le niveau courant est
incrémenté.

Avec ton idée on perd toute notion d'ERROR et WARNING qui sont au
dessus de tout
cela.

print_msg "Fatal error : your nbuild is hightly corrupted, it may damage your
computer" doit être affiché tout le temps (sauf si verbosity = NONE) que ça
intervienne au niveau 0 ou au niveau N+100. Avec ton système on perd le
message
si l'utilisateur fait -v INFO


Lorsque print_status est appelé, le résultat passé en argument est
affiché et le niveau courant est décrémenté.

C'est un peu comme le système de parenthèses. Une fonction ouvre la
parenthèse. Si cette même fonction est appelée, une sous-parenthèse
est ouverte. Lorsque l'autre fonction est appelée, la dernière
parenthèse ouverte est fermée.

Comme dit plus haut print_msg n'est pas forcément suivit de print_status


D'autre niveau "utilisateur" pourrait être rajouté (par exemple,
"MAIN" comme le suggérait Gontran).

Sur ce point je suis d'accord


Je ne sais pas si ma proposition répond bien aux problèmes posés.
C'est un peu une proposition naïve. Vous pouvez la jeter si elle ne
vous plaît pas.

Je pense sincèrement que ce n'est pas la meilleure solution.
Je ne sais pas si elle est naïve, mais je ne vais sûremment pas la jeter à la
poubelle, le débat avance et c'est l'essentiel :-)

++
Chicha

Répondre à