【问题标题】:How to see print() results in Tarantool Docker container如何在 Tarantool Docker 容器中查看 print() 结果
【发布时间】:2021-01-29 20:27:00
【问题描述】:

我正在使用tarantool/tarantool:2.6.0 Docker 映像(目前最新)并为该项目编写 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')

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

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

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

我得到错误:

有什么建议吗? 谢谢!

【问题讨论】:

    标签: tarantool


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2018-05-29
      • 1970-01-01
      • 2019-03-14
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2021-12-15
      相关资源
      最近更新 更多