2010-09-14 10 views
4

Les fichiers Python logging module et CherryPy's Config API utilisent des fichiers ConfigParser. Par conséquent, j'ai supposé que je pourrais utiliser un seul fichier de configuration pour ma propre configuration d'applications, sa configuration de journalisation et la configuration de CherryPy. Lorsque mon journal et CherryPy étaient séparés, ils fonctionnaient correctement, et mon fichier de configuration n'analyse pas les erreurs en utilisant l'API ConfigParser. Cependant, CherryPy semble barf sur cette section:La journalisation et CherryPy peuvent-ils partager le même fichier de configuration?

[loggers] 
keys=root,myapp,cherrypy,cperror,cpaccess 

donnant l'exception suivante:

Traceback (most recent call last): 
    File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap 
    self.run() 
    File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run 
    self._target(*self._args, **self._kwargs) 
    File "unittests.py", line 431, in main 
    cherrypy.config.update(server.CONFIG_FILE) 
    File "/usr/lib/pymodules/python2.6/cherrypy/_cpconfig.py", line 263, in update 
    config = _Parser().dict_from_file(config) 
    File "/usr/lib/pymodules/python2.6/cherrypy/_cpconfig.py", line 383, in dict_from_file 
    return self.as_dict() 
    File "/usr/lib/pymodules/python2.6/cherrypy/_cpconfig.py", line 374, in as_dict 
    raise ValueError(msg, x.__class__.__name__, x.args) 
ValueError: ("Config error in section: 'loggers', option: 'keys', value: 'root,myapp,cherrypy,cperror,cpaccess'. Config values must be valid Python.", 'TypeError', ("unrepr could not resolve the name 'root'",)) 

Les docs CherryPy disent jamais qui a besoin CherryPy son fichier de configuration pour être séparé de votre autre configuration, mais je Je commence à penser que cela pourrait être nécessaire. Les docs disent que la configuration du site et de l'application doit être séparée si vous avez plus d'une application par site, mais que semble comme un problème différent ... est-ce qu'il confond ma configuration de journalisation pour une configuration d'application CherryPy?

Est-ce possible? Si non, alors je ne sais pas pourquoi CherryPy dérange même en utilisant la bibliothèque ConfigParser en premier lieu.

Répondre

4

Réponse courte: non, vous ne pouvez probablement pas les mélanger. Comme décrit dans le docs: «Les entrées de configuration sont toujours une paire clé/valeur, comme server.socket_port = 8080. La clé est toujours un nom et la valeur est toujours un objet Python, c'est-à-dire si la valeur que vous définissez est un int (ou un autre nombre), il doit ressembler à un int de Python, par exemple, 8080. Si la valeur est une chaîne, il doit être cité, tout comme une chaîne Python. "

Même si nous voulons des types Python arbitraires dans nos valeurs de configuration CherryPy, CherryPy utilise ConfigParser simplement parce que nous ne voulions pas écrire notre propre analyseur pour la syntaxe de section et d'entrée.