Skip to content

Commit ca00635

Browse files
Fix CNS regression (Azure#489)
log.SetTarget creates the log file under log directory using golang os package. Whenever code sets the log directory, it needed to call SetTarget to create the actual log file under that directory. In the recent logger changes, InitLogger by default set the log directory to the current folder. This created the log file in the current folder. The code then set the log directory to a different location without a subsequent call to log.SetTarget. This resulted into the logger to not find the actual log file in the set log directory. This fix updates the logger InitLogger function to accept the log directory to create the file in correct log directory. To avoid having such issue, this fix also combines the function calls to set log directory and set target into a single function. This prevents any out of order calls resulting into such issue.
1 parent d0e6fe7 commit ca00635

File tree

11 files changed

+33
-36
lines changed

11 files changed

+33
-36
lines changed

aitelemetry/telemetrywrapper_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,9 @@ var (
2222
)
2323

2424
func TestMain(m *testing.M) {
25-
log.SetLogDirectory("/var/log/")
2625
log.SetName("testaitelemetry")
2726
log.SetLevel(log.LevelInfo)
28-
err := log.SetTarget(log.TargetLogfile)
27+
err := log.SetTargetLogDirectory(log.TargetLogfile, "/var/log/")
2928
if err == nil {
3029
fmt.Printf("TestST LogDir configuration succeeded\n")
3130
}

cni/ipam/plugin/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ var version string
2424
func main() {
2525
var config common.PluginConfig
2626
config.Version = version
27+
logDirectory := "" // Sets the current location as log directory
2728

2829
log.SetName(name)
2930
log.SetLevel(log.LevelInfo)
30-
if err := log.SetTarget(log.TargetLogfile); err != nil {
31+
if err := log.SetTargetLogDirectory(log.TargetLogfile, logDirectory); err != nil {
3132
fmt.Printf("Failed to setup cni logging: %v\n", err)
3233
return
3334
}

cni/network/plugin/main.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,15 @@ func main() {
139139
}
140140

141141
var (
142-
config common.PluginConfig
143-
err error
144-
cnimetric telemetry.AIMetric
142+
config common.PluginConfig
143+
err error
144+
cnimetric telemetry.AIMetric
145+
logDirectory string // This sets empty string i.e. current location
145146
)
146147

147148
log.SetName(name)
148149
log.SetLevel(log.LevelInfo)
149-
if err = log.SetTarget(log.TargetLogfile); err != nil {
150+
if err = log.SetTargetLogDirectory(log.TargetLogfile, logDirectory); err != nil {
150151
fmt.Printf("Failed to setup cni logging: %v\n", err)
151152
return
152153
}

cni/telemetry/service/telemetrymain.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,7 @@ func main() {
129129

130130
log.SetName(azureVnetTelemetry)
131131
log.SetLevel(logLevel)
132-
if logDirectory != "" {
133-
log.SetLogDirectory(logDirectory)
134-
}
135-
136-
err = log.SetTarget(logTarget)
132+
err = log.SetTargetLogDirectory(logTarget, logDirectory)
137133
if err != nil {
138134
fmt.Printf("Failed to configure logging: %v\n", err)
139135
return

cnm/plugin/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,10 @@ func main() {
166166
}
167167

168168
// Create logging provider.
169+
logDirectory := "" // Sets the current location as log directory
169170
log.SetName(name)
170171
log.SetLevel(logLevel)
171-
err = log.SetTarget(logTarget)
172+
err = log.SetTargetLogDirectory(logTarget, logDirectory)
172173
if err != nil {
173174
fmt.Printf("Failed to configure logging: %v\n", err)
174175
return

cns/logger/log.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ type CNSLogger struct {
2828
}
2929

3030
// Initialize CNS Logger
31-
func InitLogger(fileName string, logLevel, logTarget int) {
31+
func InitLogger(fileName string, logLevel, logTarget int, logDir string) {
3232
Log = &CNSLogger{
33-
logger: log.NewLogger(fileName, logLevel, logTarget),
33+
logger: log.NewLogger(fileName, logLevel, logTarget, logDir),
3434
}
3535
}
3636

@@ -61,8 +61,8 @@ func Close() {
6161
}
6262
}
6363

64-
func SetLogDirectory(dir string) {
65-
Log.logger.SetLogDirectory(dir)
64+
func SetTargetLogDirectory(target int, dir string) error {
65+
return Log.logger.SetTargetLogDirectory(target, dir)
6666
}
6767

6868
// Set context details for logs and metrics

cns/service/main.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,7 @@ func main() {
224224
config.ErrChan = make(chan error, 1)
225225

226226
// Create logging provider.
227-
logger.InitLogger(name, logLevel, logTarget)
228-
logger.SetLogDirectory(logDirectory)
227+
logger.InitLogger(name, logLevel, logTarget, logDirectory)
229228

230229
if !telemetryEnabled {
231230
logger.Errorf("[Azure CNS] Cannot disable telemetry via cmdline. Update cns_config.json to disable telemetry.")

log/logger.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,16 @@ type Logger struct {
6060
var pid = os.Getpid()
6161

6262
// NewLogger creates a new Logger.
63-
func NewLogger(name string, level int, target int) *Logger {
63+
func NewLogger(name string, level int, target int, logDir string) *Logger {
6464
var logger Logger
6565

6666
logger.l = log.New(nil, logPrefix, log.LstdFlags)
6767
logger.name = name
6868
logger.level = level
69+
logger.directory = logDir
6970
logger.SetTarget(target)
7071
logger.maxFileSize = maxLogFileSize
7172
logger.maxFileCount = maxLogFileCount
72-
logger.directory = ""
7373
logger.mutex = &sync.Mutex{}
7474

7575
return &logger
@@ -103,9 +103,10 @@ func (logger *Logger) Close() {
103103
}
104104
}
105105

106-
// SetLogDirectory sets the directory location where logs should be stored.
107-
func (logger *Logger) SetLogDirectory(logDirectory string) {
106+
// SetTargetLogDirectory sets the directory location where logs should be stored along with the target
107+
func (logger *Logger) SetTargetLogDirectory(target int, logDirectory string) error {
108108
logger.directory = logDirectory
109+
return logger.SetTarget(target)
109110
}
110111

111112
// GetLogDirectory gets the directory location where logs should be stored.

log/logger_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ const (
1717

1818
// Tests that the log file rotates when size limit is reached.
1919
func TestLogFileRotatesWhenSizeLimitIsReached(t *testing.T) {
20-
l := NewLogger(logName, LevelInfo, TargetLogfile)
20+
logDirectory := "" // This sets the current location for logs
21+
l := NewLogger(logName, LevelInfo, TargetLogfile, logDirectory)
2122
if l == nil {
2223
t.Fatalf("Failed to create logger.\n")
2324
}
@@ -53,7 +54,8 @@ func TestLogFileRotatesWhenSizeLimitIsReached(t *testing.T) {
5354
}
5455

5556
func TestPid(t *testing.T) {
56-
l := NewLogger(logName, LevelInfo, TargetLogfile)
57+
logDirectory := "" // This sets the current location for logs
58+
l := NewLogger(logName, LevelInfo, TargetLogfile, logDirectory)
5759
if l == nil {
5860
t.Fatalf("Failed to create logger.")
5961
}
@@ -62,15 +64,15 @@ func TestPid(t *testing.T) {
6264
l.Close()
6365
fn := l.GetLogDirectory() + logName + ".log"
6466
defer os.Remove(fn)
65-
67+
6668
logBytes, err := ioutil.ReadFile(fn)
6769
if err != nil {
6870
t.Fatalf("Failed to read log, %v", err)
6971
}
7072
log := string(logBytes)
71-
exptectedLog := fmt.Sprintf("[%v] LogText 1", os.Getpid());
73+
exptectedLog := fmt.Sprintf("[%v] LogText 1", os.Getpid())
7274

73-
if !strings.Contains(log, exptectedLog){
75+
if !strings.Contains(log, exptectedLog) {
7476
t.Fatalf("Unexpected log: %s.", log)
7577
}
7678
}

log/stdapi.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
package log
55

66
// Standard logger is a pre-defined logger for convenience.
7-
var stdLog = NewLogger("azure-container-networking", LevelInfo, TargetStderr)
7+
// Set log directory as the current location
8+
var stdLog = NewLogger("azure-container-networking", LevelInfo, TargetStderr, "")
89

910
// GetStd - Helper functions for the standard logger.
1011
func GetStd() *Logger {
@@ -15,10 +16,6 @@ func SetName(name string) {
1516
stdLog.SetName(name)
1617
}
1718

18-
func SetTarget(target int) error {
19-
return stdLog.SetTarget(target)
20-
}
21-
2219
func SetLevel(level int) {
2320
stdLog.SetLevel(level)
2421
}
@@ -31,8 +28,8 @@ func Close() {
3128
stdLog.Close()
3229
}
3330

34-
func SetLogDirectory(logDirectory string) {
35-
stdLog.SetLogDirectory(logDirectory)
31+
func SetTargetLogDirectory(target int, logDirectory string) error {
32+
return stdLog.SetTargetLogDirectory(target, logDirectory)
3633
}
3734

3835
func GetLogDirectory() string {

0 commit comments

Comments
 (0)