我们正在研究add-on that writes to a log file,我们需要确定默认var/log
目录的位置(${buildout:directory}
变量的值)。
有没有一种简单的方法可以实现这一目标?
答案 0 :(得分: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')
参见完整示例
值得注意的是,如果错误地多次调用init函数,初始返回将避免多次记录。
无论如何,如果您不想使用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或您的首选方法)到环境变量中。
答案 1 :(得分:2)
您可以让buildout在parts/instance/etc/zope.conf
中的环境变量中设置它:
[instance]
recipe = plone.recipe.zope2instance
environment-vars =
BUILDOUT_DIRECTORY ${buildout:directory}
用Python代码检查它:
import os
buildout_directory = os.environ.get('BUILDOUT_DIRECTORY', '')
默认情况下,您已经拥有INSTANCE_HOME
环境变量,这可能就足够了。