in util/common/logs.go [144:203]
func GenerateLogConfig(numberMonitoredLogs int, filePath string) error {
if numberMonitoredLogs == 0 || filePath == "" {
return errors.New("number of monitored logs or file path is empty")
}
type LogInfo struct {
FilePath string `json:"file_path"`
LogGroupName string `json:"log_group_name"`
LogStreamName string `json:"log_stream_name"`
RetentionInDays int `json:"retention_in_days"`
Timezone string `json:"timezone"`
}
var cfgFileData map[string]interface{}
// For metrics and traces, we will keep the default config while log will be appended dynamically
file, err := os.OpenFile(filePath, os.O_RDWR, 0644)
if err != nil {
return err
}
defer file.Close()
fileBytes, err := io.ReadAll(file)
if err != nil {
return err
}
err = json.Unmarshal(fileBytes, &cfgFileData)
if err != nil {
return err
}
var logFiles []LogInfo
tempFolder := getTempFolder()
for i := 0; i < numberMonitoredLogs; i++ {
logFiles = append(logFiles, LogInfo{
FilePath: fmt.Sprintf("%s/test%d.log", tempFolder, i+1),
LogGroupName: "{instance_id}",
LogStreamName: fmt.Sprintf("test%d.log", i+1),
RetentionInDays: 1,
Timezone: "UTC",
})
}
log.Printf("Writing config file with %d logs to %v", numberMonitoredLogs, filePath)
cfgFileData["logs"].(map[string]interface{})["logs_collected"].(map[string]interface{})["files"].(map[string]interface{})["collect_list"] = logFiles
finalConfig, err := json.MarshalIndent(cfgFileData, "", " ")
if err != nil {
return err
}
err = os.WriteFile(filePath, finalConfig, 0644)
if err != nil {
return err
}
return nil
}