Dans le passé, j'avais un cas d'utilisation similaire. Je l'ai résolu en déclarant le chemin à l'intérieur du zope.conf:
zope-conf-additional +=
<product-config pd.prenotazioni>
logfile ${buildout:directory}/var/log/prenotazioni.log
</product-config>
Voir le README de ce produit:
Cette configuration Zope peut alors être interprétée avec cette code:
from App.config import getConfiguration
product_config = getattr(getConfiguration(), 'product_config', {})
config = product_config.get('pd.prenotazioni', {})
logfile = config.get('logfile')
Voir l'exemple complet
A noter le fait que le rendement initial évite l'enregistrement multiple si la fonction init est appelée à tort plus d'une fois.
Quoi qu'il en soit, si vous ne voulez pas jouer avec le buildout et la configuration zope personnalisée, vous pouvez obtenir l'emplacement du journal des événements par défaut.
Il est spécifié dans le fichier zope.conf. Vous devriez avoir quelque chose comme ceci:
<eventlog>
level INFO
<logfile>
path /path/to/plone/var/log/instance.log
level INFO
</logfile>
</eventlog>
j'ai pu obtenir le chemin avec ce code:
from App.config import getConfiguration
import os
eventlog = getConfiguration().eventlog
logpath = eventlog.handler_factories[0].instance.baseFilename
logfolder = os.path.split(logpath)[0]
probablement à la recherche dans le code du module App, vous trouverez un moyen plus simple d'obtenir cette valeur.
Une autre solution possible (IMHO plus faible) serait de stocker (via buildout ou votre méthode préférée) le chemin du fichier journal dans une variable d'environnement.
merci, j'ai trouvé cela utile aussi, mais pour mon cas d'utilisation spécifique, je pense que la solution @alepisa est plus souhaitable. – hvelarde