Mon application python comprend un programme principal et plusieurs modules. Chaque module contientNom de l'enregistreur séparé pour chaque instance d'application
import logging
log = logging.getLogger('myapp.mymodule')
au niveau global. Handlers et autres éléments initialisés dans le programme principal, et généralement tous les messages transmis à syslog.
Maintenant je veux lancer plusieurs instances d'application (le fichier de configuration avec le nom d'instance peut être spécifié comme paramètre de ligne de commande). La question est: comment transmettre le nom de l'instance à chaque module importé? Je veux que le nom de l'enregistreur ressemble à "myappinstance.mymodule" ou "myapp.instance.module". Et je ne veux pas jouer avec l'analyse du fichier de configuration dans chaque module, car cela nécessitera un chemin de configuration codé en dur.
Je ne pense pas que cela puisse résoudre votre problème. Il y a une condition de course pour passer le nom d'instance aux modules en définissant des variables d'environnement. Que faire si plusieurs instances démarrent en même temps? – iamamac
Les variables d'environnement ne sont pas globales (à l'échelle de l'OS), elles sont héritées dans l'arbre de processus. Je peux lancer simultanément deux instances main.py et si chacune d'elles définit une variable evnironment spécifique, elle ne sera propagée qu'aux processus enfants. – Max