2016-07-17 13 views
4

私はnode.jsのバックグラウンドから来て、構成可能なフォーマット出力を可能にするいくつかのロガー(winstonなど)コンソールやログファイルなどの複数のソースがあり、それぞれの出力は異なる形式になっています。GoLangロガーには、コンソールとログファイルとで異なるフォーマットでロギングできるものがありますか?

私はGoLangと似たようなことを試みており、この機能をサポートするロギングパッケージを見つけることが困難でした。

この結果を得るために使用できるGoLangパッケージはありますか?以下は

答えて

1

logrusでこれを達成するための一例である、既にここで言及され、それはあなたがhooksを使用して必要な正確に何を与えることができます。フックは、さまざまな形式を使用してログを異なる宛先に送信できます。 InfluxDBまたはLogstashにログを送信する場合のように、ドキュメンテーションにフックのリストがあります。必要に応じて独自のフックを実装することもできます。

+0

サンプルのフック( 'logrus'ページにリストされている以外)のために' lumberjack'のフックを実装しましたログ):https://github.com/dc0d/lumberjackhook –

2

Sirupsen/logrus

package main 

import (
    "github.com/Sirupsen/logrus" 
    "os" 
) 

// Create a new instance of the logger. You can have any number of instances. 
var log1 = logrus.New() 
var log2 = logrus.New() 

func main() { 
    // The API for setting attributes is a little different than the package level 
    // exported logger. See Godoc. 
    log1.Out = os.Stderr 
    log1.Formatter = &logrus.TextFormatter{} 

    LogOutputFile, err := os.OpenFile("out.log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666) 
    if err != nil { 
    logrus.Fatalf("error opening file: %v", err) 
    } 

    log2.Out = LogOutputFile 
    log2.Formatter = &logrus.JSONFormatter{} 

    log1.WithFields(logrus.Fields{ 
    "animal": "walrus", 
    "size": 10, 
    }).Info("A group of walrus emerges from the ocean") 

    log2.WithFields(logrus.Fields{ 
    "animal": "walrus", 
    "size": 10, 
    }).Info("A group of walrus emerges from the ocean") 

} 
+0

迅速な対応をありがとうございます。しかし、私はコンソールと同時にファイルにログを記録する単一の "ログ"要求(例えばlog.Info)を発行する方法を探しています(それぞれ異なるフォーマットを持つ:おそらくコンソール出力はフォーマットされ、colourizedされ、ログファイルの出力はJSONまたは他の標準フォーマットになります) –

0

rlogを使用できます。標準的なGolangライブラリを除いて、これを構成可能で軽量なロガーとして開発しました。

デフォルトでは、stderrまたはstdoutにログを記録するだけですが、代わりに、または通常の出力に加えてログファイルを指定することもできます。これはまさにあなたが求めているものです。

現在のところ、出力フォーマットが異なるという考え方はサポートしていません。あなたが見たいと思う異なるフォーマットの例を教えてください。多分それを実装することができます。

関連する問題