【问题标题】:No stdout/stderror output when running Haskell application in Kubernetes在 Kubernetes 中运行 Haskell 应用程序时没有 stdout/stderror 输出
【发布时间】:2020-01-01 16:45:42
【问题描述】:

我遇到了一个非常奇怪的问题,当通过 Kubernetes 运行时,我似乎没有从 Haskell 应用程序获得任何 stdout/stderr 输出。

我正在使用非常基本的putStrLn 写入标准输出。

如果我在 Kubernetes 环境中手动输入容器并通过 shell 运行应用程序 - 我会看到预期的输出。

这个问题可能是什么原因/

【问题讨论】:

    标签: haskell kubernetes output-buffering


    【解决方案1】:

    这似乎是由于在输出到 kubernetes 日志记录时将输出缓冲设置为“块”模式造成的。

    通过将缓冲设置为LineBuffering 修复:

    import System.IO
    
    ...
      hSetBuffering stdout LineBuffering
      hSetBuffering stderr LineBuffering
    

    http://hackage.haskell.org/package/base-4.12.0.0/docs/System-IO.html#t:BufferMode

    句柄打开时的默认缓冲模式是 依赖于实现并且可能依赖于文件系统对象 它附在那个把手上。对于大多数实现,物理 文件通常是块缓冲的,终端通常是 行缓冲。

    感谢 fp slack 的 Jesse Kempf 向我指出这一点!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多