首页 > 解决方案 > 如何在 Tarantool Docker 容器中查看 print() 结果

问题描述

我正在使用tarantool/tarantool:2.6.0Docker 映像(目前是最新的)并为该项目编写 lua 脚本。我试图找出如何查看print()调用函数的结果。如果没有 print() 工作,调试我的代码非常困难。
在 tarantool 控制台 print() 也没有效果。

使用简单的 print()

文档说 print() 可以工作stdout,但是当我通过以下方式查看容器的日志时,我看不到任何结果docker logs -f <CONTAINER_NAME>

我还尝试将容器的日志驱动程序设置为local. 比我一次打印到容器的日志,但只有一次......

容器的/var/log目录总是空的。

使用 box.session.push()

在控制台中使用box.session.push()可以正常工作,但是当我在 lua 脚本中使用它时:

-- app.lua
function log(s)
  box.session.push(s)
end

-- No effect
log('hello')

function say_something(s)
    log(s)
end

box.schema.func.create('say_something')
box.schema.user.grant('guest', 'execute', 'function', 'say_something')

然后say_something()像这样从 nodeJs 连接器调用:

const TarantoolConnection = require('tarantool-driver');

const conn = new TarantoolConnection(connectionData);
const res = await conn.call('update_links', 'hello');

我得到错误: 在此处输入图像描述

有什么建议么?谢谢!

标签: tarantool

解决方案


我想你在命令io.flush()之后错过了。print

io.flush()在每次通话后添加后,print我的消息开始写入日志(docker logs -f <CONTAINER_NAME>)。

我也建议log为此目的使用模块。它在没有缓冲的情况下写入标准错误。

关于连接器中的错误,我认为 nodejs 连接器根本不支持推送。


推荐阅读