Log-Setup
func SetupLogging(logPath string) (err error) {
logFile, err := os.OpenFile(logPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600)
if err != nil {
return err
}
logOutputs := io.MultiWriter(logFile, os.Stdout)
log.SetOutput(logOutputs)
log.SetFlags(0)
return
}Nachdem diese Funktion aufgerufen wurde, werden Aufrufe von log.Println(…) sowohl auf stdout als auch in die angegebene Datei loggen.
Pretty-print struct
kann keine verschachtelten structs schön ausgeben.
func prettyPrintStruct(s interface{}) {
v := reflect.ValueOf(s)
t := v.Type()
if t.Kind() != reflect.Struct {
fmt.Println("Input is not a struct")
return
}
fmt.Printf("%s:\n{\n", t.Name())
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
value := v.Field(i)
fmt.Printf(" %s: %v\n", field.Name, value.Interface())
}
fmt.Printf("}\n\n")
}