64172


GoのWebサーバ（厳密にはlabstack/echo）を利用したアプリケーションをKubernetesのコンテナ上で実行しています。  
アプリケーションにおいて、エラーが発生した場合、標準エラー出力にエラーの内容を出力しているのですが、`kubectl
logs`コマンドにおいて出力を確認したところ、反映されませんでした。何故このような状況が発生するのでしょうか。

状況についての補足は下記の通りです。

  * 起動時にはアプリケーションの標準出力を当該コマンドで確認できています。
  * `exec`コマンドでPod内に入ると標準エラー出力を確認できています。
  * `logs`コマンドをリアルタイムで監視している場合、Podの停止時に標準エラー出力が一度に表示されます。
  * 該当の標準エラー出力に関するコードを下記の通り、変更したところ、反映されるようになりました。

[code]

    // ■ 変更前
    _, _ = os.Stderr.Write([]byte(formatNow + " " + id + " " + msg))
    // ■ 変更後
    output := fmt.Sprintf("%s\t%s\t%s\n  %+v\n", formatNow, id, msg)
    _, _ = osStderr.Write([]byte(output))
    
[/code]


CC BY-SA 4.0
2020-03-27T03:33:53.297
64148
2020-03-28T05:00:28.357
38385
question
go kubernetes
Goのwebサーバの標準出力がコンテナのログ出力に反映されません


変更前はメッセージ末尾で改行していませんが、変更後は改行しています。このためどこかの IO バッファがフラッシュされるかどうかが変わっていそうです。

※この違いは、Twitter にて angel
さんに[教えていただきました](https://twitter.com/angel_p_57/status/1243743348591955968)。


CC BY-SA 4.0
2020-03-28T04:09:23.100
64172
2020-03-28T05:00:28.357
2020-03-28T05:00:28.357
19110
19110
64148
answer