在Kubernetes中运行Haskell应用程序时没有stdout/stderror输出

在Kubernetes中运行Haskell应用程序时没有stdout/stderror输出,haskell,kubernetes,output-buffering,Haskell,Kubernetes,Output Buffering,我遇到了一个非常奇怪的问题,在通过Kubernetes运行时,我似乎没有从Haskell应用程序获得任何stdout/stderr输出 我使用非常基本的putStrLn来编写stdout 如果我在Kubernetes环境中手动输入容器并通过shell运行应用程序,我会看到预期的输出 此问题的原因可能是什么/这似乎是由于输出到kubernetes日志时将输出缓冲设置为“块”模式造成的 通过将缓冲设置为LineBuffering进行修复: import System.IO ... hSetBu

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

我使用非常基本的
putStrLn
来编写stdout

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


此问题的原因可能是什么/

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

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

import System.IO

...
  hSetBuffering stdout LineBuffering
  hSetBuffering stderr LineBuffering

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


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

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

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

import System.IO

...
  hSetBuffering stdout LineBuffering
  hSetBuffering stderr LineBuffering

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

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