赞
踩
ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。
编码器以 JSON 格式记录日志,并在可能的情况下依赖默认的 zapcore/json_encoder。它还处理 ECS 错误格式的错误字段记录。
默认情况下,会添加以下字段:
- {
- "log.level": "info",
- "@timestamp": "2020-09-13T10:48:03.000Z",
- "message":" some logging info",
- "ecs.version": "1.6.0"
- }
将包添加到你的 go.mod 文件中:
go.mod
- module zerolog-logging
- require go.elastic.co/ecszap master
- require go.uber.org/zap master
我们使用如下的命令来下载包:
- go get go.elastic.co/ecszap
- go get go.uber.org/zap
设置默认记录器。例如:
- encoderConfig := ecszap.NewDefaultEncoderConfig()
- core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
- logger := zap.New(core, zap.AddCaller())
你可以自定义 ECS 记录器。例如:
- encoderConfig := ecszap.EncoderConfig{
- EncodeName: customNameEncoder,
- EncodeLevel: zapcore.CapitalLevelEncoder,
- EncodeDuration: zapcore.MillisDurationEncoder,
- EncodeCaller: ecszap.FullCallerEncoder,
- }
- core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
- logger := zap.New(core, zap.AddCaller())
zap1.go
- package main
-
- import (
- "errors"
- "os"
-
- "go.elastic.co/ecszap"
- "go.uber.org/zap"
- )
-
- func main() {
- encoderConfig := ecszap.NewDefaultEncoderConfig()
- core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
- logger := zap.New(core, zap.AddCaller())
-
- logger = logger.With(zap.String("custom", "foo"))
- logger = logger.Named("mylogger")
-
- // Use strongly typed Field values
- logger.Info("some logging info",
- zap.Int("count", 17),
- zap.Error(errors.New("boom")))
- }
我们可以使用如下的方法来运行上面的应用:
go run zap1.go | jq .
zap_error.go
- package main
-
- import (
- "errors"
- "os"
-
- pkgerrors "github.com/pkg/errors"
- "go.elastic.co/ecszap"
- "go.uber.org/zap"
- )
-
- func main() {
- encoderConfig := ecszap.NewDefaultEncoderConfig()
- core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
- logger := zap.New(core, zap.AddCaller())
-
- err := errors.New("boom")
- logger.Error("some error", zap.Error(pkgerrors.Wrap(err, "crash")))
- }
我们使用如下的命令来运行应用:
go run zap_error.go | jq .
zap_sugar.go
- package main
-
- import (
- "os"
-
- "go.elastic.co/ecszap"
- "go.uber.org/zap"
- )
-
- func main() {
- encoderConfig := ecszap.NewDefaultEncoderConfig()
- core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
- logger := zap.New(core, zap.AddCaller())
-
- sugar := logger.Sugar()
- sugar.Infow("some logging info",
- "foo", "bar",
- "count", 17,
- )
- }
我们使用如下的命令来运行:
go run zap_sugar.go | jq .
Filebeat 7.16+
filebeat.yaml
- filebeat.inputs:
- - type: filestream # 1
- paths: /path/to/logs.json
- parsers:
- - ndjson:
- overwrite_keys: true # 2
- add_error_key: true # 3
- expand_keys: true # 4
-
- processors: # 5
- - add_host_metadata: ~
- - add_cloud_metadata: ~
- - add_docker_metadata: ~
- - add_kubernetes_metadata: ~
Filebeat < 7.16
filebeat.yaml
- filebeat.inputs:
- - type: log
- paths: /path/to/logs.json
- json.keys_under_root: true
- json.overwrite_keys: true
- json.add_error_key: true
- json.expand_keys: true
-
- processors:
- - add_host_metadata: ~
- - add_cloud_metadata: ~
- - add_docker_metadata: ~
- - add_kubernetes_metadata: ~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。