Go Agent v0.4.3
2024年10月16日
Fixed
os.Stdout
、os.Stderr
ログ収集エラーを修正
-
trace.Init
関数でログ収集機能を有効にするように修正します。 できるだけ他のログライブラリよりも先に実行できるように変更します。 -
os.Stdout
、os.Stderr
をラッピングしたio.Writerが使用できる関数を追加しました。
以下は、変更されたログ収集機能の使用についてのご案内です。
エージェント設定
アプリケーション実行前にwhatap.confファイルにエージェントオプションを設定ます。
logsink_enabled=true
# Enable stdout collection
logsink_stdout_enabled=true
# Enable stderr collection
logsink_stderr_enabled=true
# Optional. This is a setting for compressing data.
logsin_zip_enabled=true
ログライブラリの初期化前
先にtrace.Init()
関数を呼び出す必要があります。 内部的にos.Stdout
、os.Stderr
をラッピングします。 その後、ログライブラリがos.Stdout
、os.Stderr
を設定すると、自動的にログを収集します。
zapライブラリの例
os.Stdout
を設定する前にtrace.Init()
関数を呼び出すと、自動的にログを収集します。 os.Stdout
出力は維持しながら、同時にWhaTapログに収集します。
import (
"github.com/whatap/go-api/trace"
"github.com/whatap/go-api/logsink"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func main() {
trace.Init(nil)
//It must be executed before closing the app.
defer trace.Shutdown()
// fmt.Println("Logger stdout=", os.Stdout, zapcore.AddSync(os.Stdout))
consoleCore := zapcore.NewCore(
zapcore.NewConsoleEncoder(consoleEncoderConfig),
zapcore.AddSync(os.Stdout),
zap.InfoLevel,
)
// Menggabungkan core file dan console
core := zapcore.NewTee(consoleCore)
Log = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
Log.Info("logger started")
...
}
ログライブラリの初期化以降
ログライブラリの設定関数によってラッピングしたio.Writerを設定できます。
-
logsink.GetWriterHookStdout()
:os.Stderr
をラッピングしたio.Writerを返します。os.Stdout
に出力すると同時に、そのログをWhaTapログに収集します。 -
logsink.GetWriterHookStderr()
:os.Stderr
をラッピングしたio.Writerを返します。 ラッピングしたio.Writerはos.Stderr
に出力後、ログの内容をWhaTapログに収集します。 -
logパッケージ
import視点(
init
関数)でos.Stderr
を設定します。trace.Init
関数を先に呼び出すことができないため、ラッピングしたio.Writer(os.Stderr
)をlog.SetOutput
関数を通じて設定します。
以後使用されるlogパッケージのprint
関数を使用した出力は、ラッピングした io.Writerを通じてos.Stderr
に出力後、ログの内容をWhaTapログに収集します。
import (
"log"
"github.com/whatap/go-api/logsink"
)
...
if logsink.GetWriterHookStderr() != nil {
// set single writer
log.SetOutput(logsink.GetWriterHookStderr())
// set multi writer
multi := io.MultiWriter(file, logsink.GetWriterFromStderr())
log.SetOutput(logsink.GetWriterHookStderr())
}
//
log.Println("aaaaa")
...