2016-09-24 3 views
2

Go 1.5.2カートリッジを使用して私のGoアプリケーションをOpenshiftにデプロイしました。良い習慣として、私はそれがアプリケーションと一緒にダウンするものについてのログを生成する習慣を作った。しかし、この習慣は、私に提供される限られた記憶容量(1GB)のために、オープンシフト環境で高価であることが判明しています。ログは数秒で10MBのマークを簡単に超えてしまい、ログファイルを管理しないままにしておくと、アプリケーションの領域が不足する恐れがあります。現在、定期的にログファイルを手動でクリアしています。go.logファイルへのログの追加を停止します。

ログにファイルを追加するのをやめたり、元のアプリケーションコードに影響を与えずにログの生成を完全に停止する方法はありますか?私はファイルから書き込み権限を取り消そうとしましたが、ログは引き続き表示されます。

+0

標準のgo 'log'パッケージを使用していますか? –

+0

@BenCampbellはい。 –

+0

'go.log'から書き込み許可を適切に取り除いているなら、ファイルを' chmod'するのに十分スマートでない限り書き込みはありません。 'chmod 544'を試して、書き込みがまだ行われているかどうか確認してください。 –

答えて

2

理想的には、ログレベルを容易にするロガーを使用することをお勧めします。これにより、現在のランタイムコンテキストに基づいてログの冗長性を調整できます。 How to implement level based logging in golangの質問には、ログレベルを向上させるための豊富な情報とパッケージがあります。開発者はINFOおよびDEBUGロギングステートメントを含めることができます。これは、より低いログレベルで展開されたときにロギング出力には含まれません。

現在のインプリメンテーションでロギングを無効にする必要がある場合は、SetOutput(output io.Writer)機能を使用してネイティブgo Logger出力ライターを設定できます。 logパッケージで使用されるデフォルトのWriterは、STDERRです。 ioutilパッケージは、ロガーが何も書き込めないようにするために使用できるWriterというトップレベルのDiscardを提供します。環境に基づいてロガーの出力を設定するには、アプリケーションの初期化を更新する必要があります。

package main 

import (
    "fmt" 
    "io/ioutil" 
    "log" 
) 

func main() { 
    var shouldEnableLogging bool = false 

    if !shouldEnableLogging { 
     fmt.Println("Disabled logging") 
     log.SetOutput(ioutil.Discard) 
    } 

    for i := 0; i < 5; i++ { 
     log.Printf("I logging statement %d", i) 
    } 
} 

あなたはGo Playgroundに、このコードではこの動作を確認するために、このスニペットでブールフラグを調整することができます。これにより、ファイル・スペースのログがいっぱいにならないようにしますが、すべてのログをすべて失わせてしまいます。

+0

'SetOutput'関数で利用できる他の戦略があります。ロガーが書き込むことができるnサイズのリングバッファを作成して、定期的にディスクにフラッシュすることができます。これにより、ロガーが書き込んだ最後のnバイトを持つことができます。詳しい答えは –

+0

よかったです。はい、おそらくもっと冗長なログライブラリに向けるべきです。私がそうするまで、私は自分の状況に即座に対処するためにSetOutputの回避策を使用して喜んでします。再度、感謝します! –

関連する問題