我有密码
if config.Process.TraceLog != "" {
f, err := os.OpenFile(config.Process.TraceLog, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("error opening log file: %v", err)
os.Exit(1)
}
Trace.SetOutput(f)
}
if config.Process.InfoLog != "" {
f, err := os.OpenFile(config.Process.InfoLog, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("error opening log file: %v", err)
os.Exit(1)
}
Info.SetOutput(f)
}
if config.Process.WarningLog != "" {
f, err := os.OpenFile(config.Process.WarningLog, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("error opening log file: %v", err)
os.Exit(1)
}
Warning.SetOutput(f)
}
if config.Process.ErrorLog != "" {
f, err := os.OpenFile(config.Process.ErrorLog, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("error opening log file: %v", err)
os.Exit(1)
}
Error.SetOutput(f)
}
缩短它的好方法是什么?我不想重复相同的非常相似的 block 4 次。
如何循环?我尝试用文件名和记录器对象创建 map ,但不知道如何正确发布引用
最佳答案
我终于做到了
m := map[string]*log.Logger{
config.Process.TraceLog: Trace,
config.Process.InfoLog: Info,
config.Process.WarningLog: Warning,
config.Process.ErrorLog: Error,
}
for filepath, l := range m {
if filepath != "" {
f, err := os.OpenFile(filepath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("error opening log file: %v", err)
os.Exit(1)
}
l.SetOutput(f)
}
}
关于戈朗。帮助优化一段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39179083/