戈朗。帮助优化一段代码

我有代码


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)

}

缩短它的好方法是什么?我不想重复相同的非常相似的块 4 次。


如何使它成为一个循环?我尝试使用文件名和记录器对象创建地图,但不知道如何正确发布参考


繁花如伊
浏览 140回答 2
2回答

翻阅古今

这就是我最终做到的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)    }}

jeck猫

这样的事情可能会起作用(您可能需要调整界面中的函数类型或完全删除界面):setLogIfNotEmpty(config.Process.TraceLog, Trace)setLogIfNotEmpty(config.Process.InfoLog, Info)setLogIfNotEmpty(config.Process.WarningLog, Warning)setLogIfNotEmpty(config.Process.ErrorLog, Error)interface SetOutputer {    SetOutput(*os.File)}func setLogIfNotEmpty(file string, log SetOutputer) {    if file != "" {        f, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)        if err != nil {            fmt.Println("error opening log file: %v", err)            os.Exit(1)        }        log.SetOutput(f)    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go