Skip to content

Commit a90a77e

Browse files
authored
restruct zap logger for CNI (#2184)
* restruct zap logger
1 parent 666f36c commit a90a77e

File tree

17 files changed

+279
-311
lines changed

17 files changed

+279
-311
lines changed

cni/api/api.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ import (
99
"go.uber.org/zap"
1010
)
1111

12+
var (
13+
loggerName = "azure-vnet"
14+
logger = log.InitZapLogCNI(loggerName, "azure-vnet.log")
15+
)
16+
1217
type PodNetworkInterfaceInfo struct {
1318
PodName string
1419
PodNamespace string
@@ -24,13 +29,13 @@ type AzureCNIState struct {
2429
func (a *AzureCNIState) PrintResult() error {
2530
b, err := json.MarshalIndent(a, "", " ")
2631
if err != nil {
27-
log.Logger.Error("Failed to unmarshall Azure CNI state", zap.Error(err))
32+
logger.Error("Failed to unmarshall Azure CNI state", zap.Error(err))
2833
}
2934

3035
// write result to stdout to be captured by caller
3136
_, err = os.Stdout.Write(b)
3237
if err != nil {
33-
log.Logger.Error("Failed to write response to stdout", zap.Error(err))
38+
logger.Error("Failed to write response to stdout", zap.Error(err))
3439
return err
3540
}
3641

cni/client/client.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,19 @@ import (
88

99
"github.com/Azure/azure-container-networking/cni"
1010
"github.com/Azure/azure-container-networking/cni/api"
11-
"github.com/Azure/azure-container-networking/log"
11+
"github.com/Azure/azure-container-networking/cni/log"
1212
"github.com/Azure/azure-container-networking/platform"
1313
semver "github.com/hashicorp/go-version"
1414
"github.com/pkg/errors"
15+
"go.uber.org/zap"
1516
utilexec "k8s.io/utils/exec"
1617
)
1718

19+
var (
20+
loggerName = "azure-vnet-client"
21+
logger = log.InitZapLogCNI(loggerName, "azure-vnet.log")
22+
)
23+
1824
type client struct {
1925
exec utilexec.Interface
2026
}
@@ -30,7 +36,7 @@ func (c *client) GetEndpointState() (*api.AzureCNIState, error) {
3036
cmd.SetDir(CNIExecDir)
3137
envs := os.Environ()
3238
cmdenv := fmt.Sprintf("%s=%s", cni.Cmd, cni.CmdGetEndpointsState)
33-
log.Printf("Setting cmd to %s", cmdenv)
39+
logger.Info("Setting cmd to", zap.String("cmdenv", cmdenv))
3440
envs = append(envs, cmdenv)
3541
cmd.SetEnv(envs)
3642

cni/ipam/ipam.go

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ import (
2121

2222
const ipamV6 = "azure-vnet-ipamv6"
2323

24+
var (
25+
loggerName = "azure-vnet-ipam"
26+
logger = log.InitZapLogCNI(loggerName, "azure-ipam.log")
27+
)
28+
2429
var ipv4DefaultRouteDstPrefix = net.IPNet{
2530
IP: net.IPv4zero,
2631
Mask: net.IPv4Mask(0, 0, 0, 0),
@@ -62,25 +67,25 @@ func (plugin *ipamPlugin) Start(config *common.PluginConfig) error {
6267
// Initialize base plugin.
6368
err := plugin.Initialize(config)
6469
if err != nil {
65-
log.Logger.Error("Failed to initialize base plugin.", zap.Error(err))
70+
logger.Error("Failed to initialize base plugin.", zap.Error(err))
6671
return err
6772
}
6873

6974
// Log platform information.
70-
log.Logger.Info("Plugin version.", zap.String("name", plugin.Name),
75+
logger.Info("Plugin version.", zap.String("name", plugin.Name),
7176
zap.String("version", plugin.Version))
72-
log.Logger.Info("Running on",
77+
logger.Info("Running on",
7378
zap.String("platform", platform.GetOSInfo()))
7479

7580
// Initialize address manager. rehyrdration not required on reboot for cni ipam plugin
7681
err = plugin.am.Initialize(config, false, plugin.Options)
7782
if err != nil {
78-
log.Logger.Error("Failed to initialize address manager",
79-
zap.String("error", err.Error()))
83+
logger.Error("Failed to initialize address manager",
84+
zap.Error(err))
8085
return err
8186
}
8287

83-
log.Logger.Info("Plugin started")
88+
logger.Info("Plugin started")
8489

8590
return nil
8691
}
@@ -89,7 +94,7 @@ func (plugin *ipamPlugin) Start(config *common.PluginConfig) error {
8994
func (plugin *ipamPlugin) Stop() {
9095
plugin.am.Uninitialize()
9196
plugin.Uninitialize()
92-
log.Logger.Info("Plugin stopped")
97+
logger.Info("Plugin stopped")
9398
}
9499

95100
// Configure parses and applies the given network configuration.
@@ -100,7 +105,7 @@ func (plugin *ipamPlugin) Configure(stdinData []byte) (*cni.NetworkConfig, error
100105
return nil, err
101106
}
102107

103-
log.Logger.Info("Read network configuration",
108+
logger.Info("Read network configuration",
104109
zap.Any("config", nwCfg))
105110

106111
// Apply IPAM configuration.
@@ -140,7 +145,7 @@ func (plugin *ipamPlugin) Add(args *cniSkel.CmdArgs) error {
140145
var result *cniTypesCurr.Result
141146
var err error
142147

143-
log.Logger.Info("Processing ADD command",
148+
logger.Info("Processing ADD command",
144149
zap.String("ContainerId", args.ContainerID),
145150
zap.String("Netns", args.Netns),
146151
zap.String("IfName", args.IfName),
@@ -149,9 +154,9 @@ func (plugin *ipamPlugin) Add(args *cniSkel.CmdArgs) error {
149154
zap.ByteString("StdinData", args.StdinData))
150155

151156
defer func() {
152-
log.Logger.Info("ADD command completed",
157+
logger.Info("ADD command completed",
153158
zap.Any("result", result),
154-
zap.Any("error:", err))
159+
zap.Error(err))
155160
}()
156161

157162
// Parse network configuration from stdin.
@@ -188,14 +193,14 @@ func (plugin *ipamPlugin) Add(args *cniSkel.CmdArgs) error {
188193
// On failure, release the address pool.
189194
defer func() {
190195
if err != nil && poolID != "" {
191-
log.Logger.Info("Releasing pool",
196+
logger.Info("Releasing pool",
192197
zap.String("poolId", poolID))
193198
_ = plugin.am.ReleasePool(nwCfg.IPAM.AddrSpace, poolID)
194199
}
195200
}()
196201

197202
nwCfg.IPAM.Subnet = subnet
198-
log.Logger.Info("Allocated address with subnet",
203+
logger.Info("Allocated address with subnet",
199204
zap.String("poolId", poolID),
200205
zap.String("subnet", subnet))
201206
}
@@ -210,12 +215,12 @@ func (plugin *ipamPlugin) Add(args *cniSkel.CmdArgs) error {
210215
// On failure, release the address.
211216
defer func() {
212217
if err != nil && address != "" {
213-
log.Logger.Info("Releasing address", zap.String("address", address))
218+
logger.Info("Releasing address", zap.String("address", address))
214219
_ = plugin.am.ReleaseAddress(nwCfg.IPAM.AddrSpace, nwCfg.IPAM.Subnet, address, options)
215220
}
216221
}()
217222

218-
log.Logger.Info("Allocated address", zap.String("address", address))
223+
logger.Info("Allocated address", zap.String("address", address))
219224

220225
// Parse IP address.
221226
ipAddress, err := platform.ConvertStringToIPNet(address)
@@ -280,7 +285,7 @@ func (plugin *ipamPlugin) Get(args *cniSkel.CmdArgs) error {
280285
func (plugin *ipamPlugin) Delete(args *cniSkel.CmdArgs) error {
281286
var err error
282287

283-
log.Logger.Info("[cni-ipam] Processing DEL command",
288+
logger.Info("[cni-ipam] Processing DEL command",
284289
zap.String("ContainerId", args.ContainerID),
285290
zap.String("Netns", args.Netns),
286291
zap.String("IfName", args.IfName),
@@ -289,7 +294,7 @@ func (plugin *ipamPlugin) Delete(args *cniSkel.CmdArgs) error {
289294
zap.ByteString("StdinData", args.StdinData))
290295

291296
defer func() {
292-
log.Logger.Info("[cni-ipam] DEL command completed",
297+
logger.Info("[cni-ipam] DEL command completed",
293298
zap.Error(err))
294299
}()
295300

cni/ipam/plugin/main.go

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,22 @@
44
package main
55

66
import (
7-
"context"
87
"fmt"
98
"os"
109

1110
"github.com/Azure/azure-container-networking/cni"
1211
"github.com/Azure/azure-container-networking/cni/ipam"
13-
zaplog "github.com/Azure/azure-container-networking/cni/log"
1412
"github.com/Azure/azure-container-networking/common"
1513
"github.com/Azure/azure-container-networking/log"
16-
"go.uber.org/zap/zapcore"
1714
)
1815

19-
const (
20-
name = "azure-vnet-ipam"
21-
maxLogFileSizeInMb = 5
22-
maxLogFileCount = 8
23-
component = "cni"
24-
)
16+
const name = "azure-vnet-ipam"
2517

2618
// Version is populated by make during build.
2719
var version string
2820

2921
// Main is the entry point for CNI IPAM plugin.
3022
func main() {
31-
ctx, cancel := context.WithCancel(context.Background())
3223
var config common.PluginConfig
3324
config.Version = version
3425

@@ -43,16 +34,6 @@ func main() {
4334

4435
defer log.Close()
4536

46-
loggerCfg := &zaplog.Config{
47-
Level: zapcore.DebugLevel,
48-
LogPath: zaplog.LogPath + "azure-ipam.log",
49-
MaxSizeInMB: maxLogFileSizeInMb,
50-
MaxBackups: maxLogFileCount,
51-
Name: name,
52-
Component: component,
53-
}
54-
zaplog.Initialize(ctx, loggerCfg)
55-
5637
ipamPlugin, err := ipam.NewPlugin(name, &config)
5738
if err != nil {
5839
fmt.Printf("Failed to create IPAM plugin, err:%v.\n", err)
@@ -83,7 +64,6 @@ func main() {
8364
err = ipamPlugin.Execute(cni.PluginApi(ipamPlugin))
8465

8566
ipamPlugin.Stop()
86-
cancel()
8767

8868
if err != nil {
8969
panic("ipam plugin fatal error")

cni/ipam/pluginv6/main.go

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,22 @@
44
package main
55

66
import (
7-
"context"
87
"fmt"
98
"os"
109

1110
"github.com/Azure/azure-container-networking/cni"
1211
"github.com/Azure/azure-container-networking/cni/ipam"
13-
zaplog "github.com/Azure/azure-container-networking/cni/log"
1412
"github.com/Azure/azure-container-networking/common"
1513
"github.com/Azure/azure-container-networking/log"
16-
"go.uber.org/zap/zapcore"
1714
)
1815

19-
const (
20-
name = "azure-vnet-ipamv6"
21-
maxLogFileSizeInMb = 5
22-
maxLogFileCount = 8
23-
component = "cni"
24-
)
16+
const name = "azure-vnet-ipamv6"
2517

2618
// Version is populated by make during build.
2719
var version string
2820

2921
// Main is the entry point for CNI IPAM plugin.
3022
func main() {
31-
ctx, cancel := context.WithCancel(context.Background())
3223
var config common.PluginConfig
3324
config.Version = version
3425

@@ -43,16 +34,6 @@ func main() {
4334

4435
defer log.Close()
4536

46-
loggerCfg := &zaplog.Config{
47-
Level: zapcore.DebugLevel,
48-
LogPath: zaplog.LogPath + "azure-ipam.log",
49-
MaxSizeInMB: maxLogFileSizeInMb,
50-
MaxBackups: maxLogFileCount,
51-
Name: name,
52-
Component: component,
53-
}
54-
zaplog.Initialize(ctx, loggerCfg)
55-
5637
ipamPlugin, err := ipam.NewPlugin(name, &config)
5738
if err != nil {
5839
fmt.Printf("Failed to create IPAM plugin, err:%v.\n", err)
@@ -83,7 +64,6 @@ func main() {
8364
err = ipamPlugin.Execute(cni.PluginApi(ipamPlugin))
8465

8566
ipamPlugin.Stop()
86-
cancel()
8767

8868
if err != nil {
8969
panic("ipam plugin fatal error")

cni/log/logger.go

Lines changed: 23 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,38 @@
11
package log
22

33
import (
4-
"context"
5-
"fmt"
64
"os"
75

6+
"github.com/Azure/azure-container-networking/zaplog"
87
"go.uber.org/zap"
98
"go.uber.org/zap/zapcore"
10-
"gopkg.in/natefinch/lumberjack.v2"
119
)
1210

13-
type Config struct {
14-
Level zapcore.Level
15-
LogPath string
16-
MaxSizeInMB int
17-
MaxBackups int
18-
Name string
19-
Component string
20-
}
21-
22-
var Logger *zap.Logger
11+
const (
12+
maxLogFileSizeInMb = 5
13+
maxLogFileCount = 8
14+
)
2315

24-
// Initializes a Zap logger and returns a cleanup function so logger can be cleaned up from caller
25-
func Initialize(ctx context.Context, cfg *Config) {
26-
Logger = newFileLogger(cfg)
16+
var (
17+
loggerName string
18+
loggerFile string
19+
)
2720

28-
go func() {
29-
<-ctx.Done()
30-
err := Logger.Sync()
31-
if err != nil {
32-
fmt.Println("failed to sync logger")
33-
}
34-
}()
21+
var LoggerCfg = &zaplog.Config{
22+
Level: zapcore.DebugLevel,
23+
LogPath: loggerFile,
24+
MaxSizeInMB: maxLogFileSizeInMb,
25+
MaxBackups: maxLogFileCount,
26+
Name: loggerName,
3527
}
3628

37-
func newFileLogger(cfg *Config) *zap.Logger {
38-
logFileWriter := zapcore.AddSync(&lumberjack.Logger{
39-
Filename: cfg.LogPath,
40-
MaxSize: cfg.MaxSizeInMB,
41-
MaxBackups: cfg.MaxBackups,
42-
})
43-
44-
encoderConfig := zap.NewProductionEncoderConfig()
45-
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
46-
jsonEncoder := zapcore.NewJSONEncoder(encoderConfig)
47-
logLevel := cfg.Level
48-
49-
core := zapcore.NewCore(jsonEncoder, logFileWriter, logLevel)
50-
Logger = zap.New(core)
51-
Logger = Logger.With(zap.Int("pid", os.Getpid()))
52-
Logger = Logger.With(zap.String("component", cfg.Component))
29+
func InitZapLogCNI(loggerName, loggerFile string) *zap.Logger {
30+
LoggerCfg.Name = loggerName
31+
LoggerCfg.LogPath = LogPath + loggerFile
32+
logger := zaplog.InitZapLog(LoggerCfg)
5333

54-
return Logger
34+
// only log process id on CNI package
35+
logger = logger.With(zap.Int("pid", os.Getpid()))
36+
logger = logger.With(zap.String("component", "cni"))
37+
return logger
5538
}

cni/log/logger_mock.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package log
22

3-
import "go.uber.org/zap"
4-
53
func InitializeMock() {
6-
Logger = zap.NewNop()
4+
InitZapLogCNI("azure-vnet", "")
75
}

0 commit comments

Comments
 (0)