2016-02-19 56 views

回答

3

在过去,我有一个类似的用例。 我解决它通过声明zope.conf内的路径:

zope-conf-additional += 
    <product-config pd.prenotazioni> 
    logfile ${buildout:directory}/var/log/prenotazioni.log 
    </product-config> 

查看该产品的自述:

这Zope的配置可以接着用这个来解释代码:

from App.config import getConfiguration 

product_config = getattr(getConfiguration(), 'product_config', {}) 
config = product_config.get('pd.prenotazioni', {}) 
logfile = config.get('logfile') 

查看完整的例子

值得注意的是,在初始收益避免了多个记录,如果初始化函数被误称为不止一次的事实。

无论如何,如果你不想玩buildout和自定义zope配置,你可能想要得到默认事件日志位置

它在zope.conf中指定。你应该有这样的事情:

<eventlog> 
    level INFO 
    <logfile> 
    path /path/to/plone/var/log/instance.log 
    level INFO 
    </logfile> 
</eventlog> 

我能够使用此代码获取的路径:

from App.config import getConfiguration 
import os 

eventlog = getConfiguration().eventlog 
logpath = eventlog.handler_factories[0].instance.baseFilename 
logfolder = os.path.split(logpath)[0] 

大概看在App模块的代码,你会发现得到这个更简单的方法值。

另一种可能的(恕我直言,较弱)解决方案将存储(通过buildout或您的首选方法)日志文件路径到环境变量。

[instance] 
recipe = plone.recipe.zope2instance 
environment-vars = 
    BUILDOUT_DIRECTORY ${buildout:directory} 

以检查它在Python代码:

2

您可以让扩建中的环境变量设置在parts/instance/etc/zope.conf

import os 
buildout_directory = os.environ.get('BUILDOUT_DIRECTORY', '') 

默认情况下,你已经有了INSTANCE_HOME环境变量,这可能足够。

+0

谢谢,我发现这也有用,但对于我的具体用例,我认为@alepisa解决方案更可取。 – hvelarde