在Kubernetes中运行Haskell应用程序时没有stdout/stderror输出
我遇到了一个非常奇怪的问题,在通过Kubernetes运行时,我似乎没有从Haskell应用程序获得任何stdout/stderr输出 我使用非常基本的在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
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为我指出这一点