如何从实例内部获取 Zope 安装位置?
How to get the location of a Zope installation from inside an instance?
我们正在研究 add-on that writes to a log file,我们需要找出默认 var/log
目录的位置(${buildout:directory}
变量的值)。
有没有简单的方法可以做到这一点?
过去我有过类似的用例。
我通过在 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 函数,初始 return 可避免多次记录。
无论如何,如果您不想使用构建和自定义 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 在环境变量 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
环境变量,这可能就足够了。
我们正在研究 add-on that writes to a log file,我们需要找出默认 var/log
目录的位置(${buildout:directory}
变量的值)。
有没有简单的方法可以做到这一点?
过去我有过类似的用例。 我通过在 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 函数,初始 return 可避免多次记录。
无论如何,如果您不想使用构建和自定义 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 在环境变量 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
环境变量,这可能就足够了。