2016-03-21 13 views
1

プロダクションでgo言語を使用している人は誰でもログファイルのローリングに問題がありますか?GOでログファイルを転記する最も良い方法

ログファイルスレッドを安全にロールする可能性はありますか?

これを行うためのフレームワークはありますか?

ありがとうございます。

+0

@evanmcdonnal。私は人々が何千ものログファイルで同じ問題に直面したと思います。正確な実装をお勧めしますか? –

答えて

1

を述べているように、あなたのためのログを回転させます。他のゴルーチンからのログを受け取るチャンネルで、ロギングとログのローテーションを担当する単一のゴルーチンがあると考えることができます。回転するときはいつでも、ゴルーチンはログを回転し、他のゴルーチンからの着信ログはチャンネルにエンキューされます。ログのローテーションが完了すると、チャネル上のすべてのものをデキューしてロギングを続行します。

type Log struct { 

    log string 
    // other info you might want 
} 

// This will be your goroutine 
func Logging(LogChannel chan Log) { 

    // assume logger creates/opens a file and prepares it for writing 
    logger := New(logger) 

    for { 

     // collect a log. Will also block until a log is available on the channel 
     log <- LogChannel 

     if timeToRotate() { 

      RotateLogFile(logger) 

     } 

     // write log 
     logger.Log(log) 
    } 
} 

EDIT:の線に沿って

何か以前のコードでは、ログファイルが回転した場合にチェックした後、ブロッキング呼び出しを持っていました。 timeToRotate関数呼び出しの前に置いて、ログファイルが回転した後にログを書き込む可能性を避けることをお勧めします。

+0

それは完璧なソリューションのように見えます! –

2

通常はログファイルを直接使用していません。スクライブやカフカなどのネットワークロガーに書き込むか、または、stdout/stderrに書き込んで、サービスランナーにログファイルへの書き込み、ネットワークロガーへの転送、またはファイルのローテーションを処理させることができます。

+0

あなたはそれに対してどのようなサービスランナーをお勧めしますか? – AJPennster

+0

runitはそのIIRCを行うことができます –

2

私は12 Factorのログを標準エラーにロギングして、何か他のものにローテーションを処理させる傾向があります。

その後、あなたはシステムを持っているがここで内部ソリューションだhere

+0

絶対に同意してください。 15個以上のプロジェクトが稼動していて、それぞれ数十(または100)個のインスタンスがある場合、すべての出力をログ出力のためにstdout/stderrに出力します。これにより、devopsチーム(または自分自身)が必要に応じてロギングをオフロードできます。たとえば、AWSのCloudWatchログサービスにストリームを送信して、アラートのフィルタリングやグループ化、設定ができます。 – eduncan911

2

私はhttps://github.com/natefinch/lumberjackでうまくいっていて、golangの標準でメモリ効率的な "ログ"pkg。

使用することは非常に簡単で、単にそれを設定し、通常どおりログインに使用するコードの1行を追加します。私は本当のユーザーエクスペリエンスの面白いよ

log.SetOutput(&lumberjack.Logger{ 
    Filename: "/var/log/myapp/foo.log", 
    MaxSize: 500, // megabytes 
    MaxBackups: 3, 
    MaxAge:  28, //days 
}) 
+0

私はこれをプロジェクトの小さなものにも使用しました。しかし、大規模な展開では、ディスクへのロギングを避け、stdout/stderrに行き、インフラストラクチャで大量のログを処理させます。 – eduncan911

関連する問題