From 99fdea3f4bc5a78d88bd94f21196b764defd5879 Mon Sep 17 00:00:00 2001 From: gab-arrobo Date: Sat, 28 Sep 2024 20:06:40 -0700 Subject: [PATCH] Replace `logrus` with `zap` logger (#13) * Replace `logrus` with `zap` Signed-off-by: Arrobo, Gabriel * Use latest version for `aper` and `openapi` dependencies Signed-off-by: Arrobo, Gabriel * Improve logger by disabling the `stacktrace` Signed-off-by: Arrobo, Gabriel * Create minor release Signed-off-by: Arrobo, Gabriel --------- Signed-off-by: Arrobo, Gabriel --- VERSION | 2 +- go.mod | 11 ++++---- go.sum | 34 +++++++++++------------ logger/logger.go | 60 +++++++++++++++++++++++----------------- ngapConvert/AmfId.go | 4 +-- ngapConvert/BitString.go | 4 +-- ngapConvert/IpAddress.go | 2 +- ngapConvert/PlmnId.go | 2 +- ngapConvert/SNssai.go | 2 +- ngapConvert/TAI.go | 2 +- ngapConvert/TimeStamp.go | 2 +- ngapConvert/TraceData.go | 10 +++---- ngapConvert/UEAmbr.go | 2 +- 13 files changed, 72 insertions(+), 65 deletions(-) diff --git a/VERSION b/VERSION index 3ef5fad..f0bb29e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.4-dev +1.3.0 diff --git a/go.mod b/go.mod index 0e49889..ca9e14f 100644 --- a/go.mod +++ b/go.mod @@ -3,13 +3,12 @@ module github.com/omec-project/ngap go 1.21 require ( - github.com/antonfisher/nested-logrus-formatter v1.3.1 - github.com/omec-project/aper v1.1.3 - github.com/omec-project/openapi v1.2.0 - github.com/sirupsen/logrus v1.8.1 + github.com/omec-project/aper v1.2.1 + github.com/omec-project/openapi v1.3.1 + go.uber.org/zap v1.27.0 ) require ( - github.com/golang-jwt/jwt v3.2.1+incompatible // indirect - golang.org/x/sys v0.0.0-20210423082822-04245dca01da // indirect + github.com/golang-jwt/jwt v3.2.2+incompatible // indirect + go.uber.org/multierr v1.10.0 // indirect ) diff --git a/go.sum b/go.sum index da476c3..1a65f3b 100644 --- a/go.sum +++ b/go.sum @@ -1,22 +1,20 @@ -github.com/antonfisher/nested-logrus-formatter v1.3.1 h1:NFJIr+pzwv5QLHTPyKz9UMEoHck02Q9L0FP13b/xSbQ= -github.com/antonfisher/nested-logrus-formatter v1.3.1/go.mod h1:6WTfyWFkBc9+zyBaKIqRrg/KwMqBbodBjgbHjDz7zjA= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= -github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/omec-project/aper v1.1.3 h1:ELtPkBmmcbtyu1BEnxUik70R3CWyW2ylBzlhBUOy3k0= -github.com/omec-project/aper v1.1.3/go.mod h1:WrF0UXIX0iYck3Fc2DZKDupd3Wip9GJkTRzcKVCHguk= -github.com/omec-project/openapi v1.2.0 h1:7Wvi0HLvhvxMyQtqGcqtMCPC/0QCGAFP5htrXCfWxRc= -github.com/omec-project/openapi v1.2.0/go.mod h1:hjU13MB1m9MHTko87JfsUNCdeD6/m6VkNZDD8Vq5U9M= +github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/omec-project/aper v1.2.1 h1:A4KhlTMta5mUA1DX2njOjOn0SuFi5WoWnSqdbRnl9Q8= +github.com/omec-project/aper v1.2.1/go.mod h1:CbCZ0uNmcD3XA4YM6wBwpqP1PYtGAaC3RqLL4B5gG2U= +github.com/omec-project/openapi v1.3.1 h1:NCteMRdMtWnMhf1CXYduuLgeu8fEhc/7XO1CiE7fN3Y= +github.com/omec-project/openapi v1.3.1/go.mod h1:cR6Iharp2TLOzEmskQ/EdCVFZnpKh0zTvUSSuyXAYLE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/logger/logger.go b/logger/logger.go index 01f8144..cf0fe8c 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -1,46 +1,56 @@ // Copyright 2019 Communication Service/Software Laboratory, National Chiao Tung University (free5gc.org) +// SPDX-FileCopyrightText: 2024 Intel Corporation // // SPDX-License-Identifier: Apache-2.0 package logger import ( - "time" - - formatter "github.com/antonfisher/nested-logrus-formatter" - "github.com/sirupsen/logrus" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" ) var ( - log *logrus.Logger - NgapLog *logrus.Entry + log *zap.Logger + NgapLog *zap.SugaredLogger + atomicLevel zap.AtomicLevel ) func init() { - log = logrus.New() - log.SetReportCaller(false) - - log.Formatter = &formatter.Formatter{ - TimestampFormat: time.RFC3339, - TrimMessages: true, - NoFieldsSpace: true, - HideKeys: true, - FieldsOrder: []string{"component", "category"}, + atomicLevel = zap.NewAtomicLevelAt(zap.InfoLevel) + config := zap.Config{ + Level: atomicLevel, + Development: false, + Encoding: "console", + EncoderConfig: zap.NewProductionEncoderConfig(), + OutputPaths: []string{"stdout"}, + ErrorOutputPaths: []string{"stderr"}, } - NgapLog = log.WithFields(logrus.Fields{"component": "LIB", "category": "NGAP"}) -} + config.EncoderConfig.TimeKey = "timestamp" + config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder + config.EncoderConfig.LevelKey = "level" + config.EncoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder + config.EncoderConfig.CallerKey = "caller" + config.EncoderConfig.EncodeCaller = zapcore.ShortCallerEncoder + config.EncoderConfig.MessageKey = "message" + config.EncoderConfig.StacktraceKey = "" + + var err error + log, err = config.Build() + if err != nil { + panic(err) + } -func GetLogger() *logrus.Logger { - return log + NgapLog = log.Sugar().With("component", "LIB", "category", "NGAP") } -func SetLogLevel(level logrus.Level) { - NgapLog.Infoln("set log level :", level) - log.SetLevel(level) +func GetLogger() *zap.Logger { + return log } -func SetReportCaller(enable bool) { - NgapLog.Infoln("set report call :", enable) - log.SetReportCaller(enable) +// SetLogLevel: set the log level (panic|fatal|error|warn|info|debug) +func SetLogLevel(level zapcore.Level) { + NgapLog.Infoln("set log level:", level) + atomicLevel.SetLevel(level) } diff --git a/ngapConvert/AmfId.go b/ngapConvert/AmfId.go index 9cdfc2e..2ec23c0 100644 --- a/ngapConvert/AmfId.go +++ b/ngapConvert/AmfId.go @@ -16,12 +16,12 @@ func AmfIdToNgap(amfId string) (regionId, setId, ptrId aper.BitString) { setId = HexToBitString(amfId[2:5], 10) tmpByte, err := hex.DecodeString(amfId[4:]) if err != nil { - logger.NgapLog.Warningln("AmfId From Models To NGAP Error: ", err.Error()) + logger.NgapLog.Warnf("amfId From Models To NGAP Error: %v", err) return } shiftByte, err := aper.GetBitString(tmpByte, 2, 6) if err != nil { - logger.NgapLog.Warningln("AmfId From Models To NGAP Error: ", err.Error()) + logger.NgapLog.Warnf("amfId From Models To NGAP Error: %v", err) return } ptrId.BitLength = 6 diff --git a/ngapConvert/BitString.go b/ngapConvert/BitString.go index 7bd8c69..14a12e5 100644 --- a/ngapConvert/BitString.go +++ b/ngapConvert/BitString.go @@ -21,7 +21,7 @@ func BitStringToHex(bitString *aper.BitString) (hexString string) { func HexToBitString(hexString string, bitLength int) (bitString aper.BitString) { hexLen := len(hexString) if hexLen != (bitLength+3)/4 { - logger.NgapLog.Warningln("hexLen[", hexLen, "] doesn't match bitLength[", bitLength, "]") + logger.NgapLog.Warnf("hexLen[%d] doesn't match bitLength[%d]", hexLen, bitLength) return } if hexLen%2 == 1 { @@ -44,7 +44,7 @@ func HexToBitString(hexString string, bitLength int) (bitString aper.BitString) func ByteToBitString(byteArray []byte, bitLength int) (bitString aper.BitString) { byteLen := (bitLength + 7) / 8 if byteLen > len(byteArray) { - logger.NgapLog.Warningln("bitLength[", bitLength, "] is beyond byteArray size[", len(byteArray), "]") + logger.NgapLog.Warnf("bitLength[%d] is beyond byteArray size[%d]", bitLength, len(byteArray)) return } bitString.Bytes = byteArray diff --git a/ngapConvert/IpAddress.go b/ngapConvert/IpAddress.go index b821242..3047da8 100644 --- a/ngapConvert/IpAddress.go +++ b/ngapConvert/IpAddress.go @@ -42,7 +42,7 @@ func IPAddressToNgap(ipv4Addr, ipv6Addr string) ngapType.TransportLayerAddress { var ipAddr ngapType.TransportLayerAddress if ipv4Addr == "" && ipv6Addr == "" { - logger.NgapLog.Warningln("IPAddressToNgap: Both ipv4 & ipv6 are nil string") + logger.NgapLog.Warnln("IPAddressToNgap: Both ipv4 and ipv6 are nil string") return ipAddr } diff --git a/ngapConvert/PlmnId.go b/ngapConvert/PlmnId.go index 0fa6e0e..f7210a6 100644 --- a/ngapConvert/PlmnId.go +++ b/ngapConvert/PlmnId.go @@ -37,7 +37,7 @@ func PlmnIdToNgap(modelsPlmnid models.PlmnId) ngapType.PLMNIdentity { var ngapPlmnId ngapType.PLMNIdentity if plmnId, err := hex.DecodeString(hexString); err != nil { - logger.NgapLog.Warnf("Decode plmn failed: %+v", err) + logger.NgapLog.Warnf("decode plmn failed: %+v", err) } else { ngapPlmnId.Value = plmnId } diff --git a/ngapConvert/SNssai.go b/ngapConvert/SNssai.go index 70169bf..a33a261 100644 --- a/ngapConvert/SNssai.go +++ b/ngapConvert/SNssai.go @@ -27,7 +27,7 @@ func SNssaiToNgap(modelsSnssai models.Snssai) ngapType.SNSSAI { if modelsSnssai.Sd != "" { ngapSnssai.SD = new(ngapType.SD) if sdTmp, err := hex.DecodeString(modelsSnssai.Sd); err != nil { - logger.NgapLog.Warnf("Decode snssai.sd failed: %+v", err) + logger.NgapLog.Warnf("decode snssai.sd failed: %+v", err) } else { ngapSnssai.SD.Value = sdTmp } diff --git a/ngapConvert/TAI.go b/ngapConvert/TAI.go index 9dad968..d1b5cbb 100644 --- a/ngapConvert/TAI.go +++ b/ngapConvert/TAI.go @@ -27,7 +27,7 @@ func TaiToNgap(tai models.Tai) ngapType.TAI { ngapTai.PLMNIdentity = PlmnIdToNgap(*tai.PlmnId) if tac, err := hex.DecodeString(tai.Tac); err != nil { - logger.NgapLog.Warnf("Decode TAC failed: %+v", err) + logger.NgapLog.Warnf("decode TAC failed: %+v", err) } else { ngapTai.TAC.Value = tac } diff --git a/ngapConvert/TimeStamp.go b/ngapConvert/TimeStamp.go index 84816c7..6c251ff 100644 --- a/ngapConvert/TimeStamp.go +++ b/ngapConvert/TimeStamp.go @@ -41,7 +41,7 @@ RFC 5905 Section 6 https://tools.ietf.org/html/rfc5905#section-6 */ func TimeStampToInt32(timeStampNgap aper.OctetString) (timeStamp int32) { if len(timeStampNgap) != 4 { - logger.NgapLog.Error("TimeStampToInt32: the size of OctetString is not 4") + logger.NgapLog.Errorln("timeStampToInt32: the size of OctetString is not 4") } timeStamp = int32(binary.BigEndian.Uint32(timeStampNgap)) diff --git a/ngapConvert/TraceData.go b/ngapConvert/TraceData.go index 61e1036..66bb1e3 100644 --- a/ngapConvert/TraceData.go +++ b/ngapConvert/TraceData.go @@ -23,7 +23,7 @@ func TraceDataToNgap(traceData models.TraceData, trsr string) ngapType.TraceActi var traceActivation ngapType.TraceActivation if len(trsr) != 4 { - logger.NgapLog.Warningln("Trace Recording Session Reference should be 2 octets") + logger.NgapLog.Warnln("trace Recording Session Reference should be 2 octets") return traceActivation } @@ -31,7 +31,7 @@ func TraceDataToNgap(traceData models.TraceData, trsr string) ngapType.TraceActi subStringSlice := strings.Split(traceData.TraceRef, "-") if len(subStringSlice) != 2 { - logger.NgapLog.Warningln("TraceRef format is not correct") + logger.NgapLog.Warnln("traceRef format is not correct") return traceActivation } @@ -40,7 +40,7 @@ func TraceDataToNgap(traceData models.TraceData, trsr string) ngapType.TraceActi plmnID.Mnc = subStringSlice[0][3:] var traceID []byte if traceIDTmp, err := hex.DecodeString(subStringSlice[1]); err != nil { - logger.NgapLog.Warnf("") + logger.NgapLog.Warnf("traceIDTmp is empty") } else { traceID = traceIDTmp } @@ -49,7 +49,7 @@ func TraceDataToNgap(traceData models.TraceData, trsr string) ngapType.TraceActi traceReference := append(tmp.Value, traceID...) var trsrNgap []byte if trsrNgapTmp, err := hex.DecodeString(trsr); err != nil { - logger.NgapLog.Warnf("Decode trsr failed: %+v", err) + logger.NgapLog.Warnf("decode trsr failed: %+v", err) } else { trsrNgap = trsrNgapTmp } @@ -61,7 +61,7 @@ func TraceDataToNgap(traceData models.TraceData, trsr string) ngapType.TraceActi // Interfaces To Trace var interfacesToTrace []byte if interfacesToTraceTmp, err := hex.DecodeString(traceData.InterfaceList); err != nil { - logger.NgapLog.Warnf("Decode Interface failed: %+v", err) + logger.NgapLog.Warnf("decode Interface failed: %+v", err) } else { interfacesToTrace = interfacesToTraceTmp } diff --git a/ngapConvert/UEAmbr.go b/ngapConvert/UEAmbr.go index 84717ef..8ab2d30 100644 --- a/ngapConvert/UEAmbr.go +++ b/ngapConvert/UEAmbr.go @@ -14,7 +14,7 @@ import ( func UEAmbrToInt64(modelAmbr string) int64 { tok := strings.Split(modelAmbr, " ") if ambr, err := strconv.ParseFloat(tok[0], 64); err != nil { - logger.NgapLog.Warnf("Parse AMBR failed %+v", err) + logger.NgapLog.Warnf("parse AMBR failed %+v", err) return int64(0) } else { return int64(ambr * getUnit(tok[1]))