从 couchapp 自定义登录 couch.log?

Posted

技术标签:

【中文标题】从 couchapp 自定义登录 couch.log?【英文标题】:Custom logging in couch.log from couchapp? 【发布时间】:2014-09-28 10:32:57 【问题描述】:

是否可以从 couchapp 写入 couchdb 服务器日志(由 default.ini 或 [log] 中的 local.ini 定义的日志)? (但来自somewhere else than a view)

如果这不可能,也许有一种解决方法可以在 couchdb 服务器日志中记录成功或不成功的身份验证尝试?我想处理这个服务器端,并想避免记录所有 httpd 活动和 grepping 用户记录模式,这似乎并不容易或漂亮......

干杯,

六月

【问题讨论】:

【参考方案1】:

一年后,我发现实际上可以使用log() 函数从视图(或列表或any javascript Design Doc functions)记录:http://docs.couchdb.org/en/1.6.1/query-server/javascript.html#log

日志(消息)

将消息记录到 CouchDB 日志(在 INFO 级别)。

参数: message – 要记录的消息

function(doc)
    log('Procesing doc ' + doc['_id']);
    emit(doc['_id'], null);

map 函数运行后,可以在 CouchDB 日志中找到以下行(例如,在 /var/log/couchdb/couch.log 中):

[Sat, 03 Nov 2012 17:38:02 GMT] [info] [<0.7543.0>] OS Process #Port<0.3289> Log :: Processing doc 8d300b86622d67953d102165dbe99467

谁会猜到:)

【讨论】:

【参考方案2】:

我很确定你不能从视图中写入 couch.log,它是一个沙盒系统。

获取与服务器的连接记录可能的。这是我的 couch.log 中的转储,其中包含 HTTP 错误:

/
[Sat, 13 Sep 2014 08:18:57 GMT] [info] [<0.160.0>] Opening index for db: test idx: _design/ivet sig: "f6b64ef8593e23cac644c13b895b7607"
[Sat, 13 Sep 2014 08:18:57 GMT] [info] [<0.121.0>] 127.0.0.1 - - GET /test/_design/ivet/_view/medicationWHP/foobar?include_docs=true 200
[Sat, 13 Sep 2014 08:18:57 GMT] [info] [<0.121.0>] 127.0.0.1 - - GET /test/_design/ivet/_view/medicationWHP/foobar?include_docs=true 500
[Sat, 13 Sep 2014 08:18:57 GMT] [error] [<0.121.0>] httpd 500 error response:
 "error":"json_encode","reason":"bad_term,key,null"

[Sat, 13 Sep 2014 08:19:05 GMT] [info] [<0.36.0>] Apache CouchDB has started on http://127.0.0.1:5984/

您可以看到每行都有 VERB PATH CODE 格式,因此您可以根据需要对其进行过滤。 (未授权是401)也可以通过/_log访问日志。详细信息在这里:

http://docs.couchdb.org/en/latest/api/server/common.html#log

要获取所有这些信息,您需要将日志级别设置为 info。您可以在蒲团的配置屏幕上执行此操作。

要在服务器端执行此操作,您可能需要使用 node.js 或类似的东西。让它使用 /_log 端点,并通过 HTTP 响应代码过滤每一行。

【讨论】:

嘿,谢谢你的回答,我知道这一点,并在我的问题中提到:“想避免记录所有 httpd 活动和 grepping 用户记录模式,这似乎不是简单或漂亮……”。但无论如何,很高兴知道以另一种方式可能是不可能的。你看到为什么不这样做的原因吗?这似乎不是一个安全问题,它对许多事情(指标、自定义错误......)很有用 我认为原因在于架构。 CouchDB 和视图服务器实际上是通过 stdio 进行通信的独立程序。视图服务器没有自己的日志,CouchDB 和视图服务器之间的通信协议中也没有任何东西来方便日志消息的传输。这不仅仅是在视图服务器中调用 log() 的简单案例。

以上是关于从 couchapp 自定义登录 couch.log?的主要内容,如果未能解决你的问题,请参考以下文章

从 CouchApp 发布数据库视图

Couchapp - 从 couchdb 中删除文档

如何从 CouchDB 中提取 CouchApp

node.js 可以像 CouchApp 一样执行从 CouchDB 提取的 JavaScript 函数吗?如何?

Couchapps 和用户处理

列出 CouchDB 中的所有 CouchApp?