我按照官方文档使用 apache 从 debian 上的源代码安装了 Ckan,一切正常,但所有 ckan 信息日志都写入错误日志文件。
这是我的虚拟主机:
<VirtualHost *:80>
ServerName ckan.mydomain.com
ServerAlias ckan.mydomain.com
WSGIScriptAlias / /etc/ckan/default/apache.wsgi
# Pass authorization info on (needed for rest api).
WSGIPassAuthorization On
# Deploy as a daemon (avoids conflicts between CKAN instances).
WSGIDaemonProcess ckan_default display-name=ckan_default processes=2 threads=15
WSGIProcessGroup ckan_default
ErrorLog /var/log/apache2/ckan_default.error.log
CustomLog /var/log/apache2/ckan_default.custom.log combined
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
</IfModule>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这是我的 ckan_default.error.log 的一行:
<[Thu Oct 15 10:47:48.797562 2015] [:error] [pid 14100] 2015-10-15 10:47:48,797 INFO [ckan.lib.base] /ckan-admin render time 0.085 seconds>
Run Code Online (Sandbox Code Playgroud)
为什么会有 [:error] 以及为什么 ckan_default.error.log 中有这一行?
谢谢。亚历克斯
CKAN 的默认配置只是将日志发送到 stderr,如ckan/config/deployment.ini_tmpl中所示:
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
Run Code Online (Sandbox Code Playgroud)
Apache 将 stderr 保存到其 ErrorLog 中,这就是为什么您会在 ckan_default.error.log 中看到它。
Apache 的文档说这是:
Apache httpd 将发送诊断信息并记录它遇到的任何错误
因此,我认为将 CKAN 的信息消息与警告(非致命错误)和错误一起包含在内并不算太疯狂。
CKAN 的默认设置被设计为最简单的方式,这就是文件处理程序在此提交中被删除的原因: https: //github.com/ckan/ckan/commit/6e1d325d61e
但这当然是一种妥协,欢迎所有建议。