考虑这个根据环境配置日志记录适配器的包,并允许在运行时更改日志记录输出。
package mylog
import (
"log"
"os"
"io"
)
const StdOut = "STDOUT"
var logger *log.Logger
func init() {
outputLocation := os.Getenv("MY_LOG_OUTPUT")
if outputLocation == "" || outputLocation == StdOut {
log.SetOutput(os.Stdout)
return
}
f, _ := getFile(outputLocation)
log.SetOutput(f)
}
func getFile(path string) (*os.File, error) {
openFlags := os.O_WRONLY | os.O_APPEND | os.O_CREATE
f, err := os.OpenFile(path, openFlags, 0666)
if err != nil {
return nil, err
}
return f, nil
}
func SetOutput(w io.Writer) {
logger.SetOutput(w)
}
func Debug(v ...interface{}) {
log.Println(v...)
}
我有两个问题:
w
的{{1}}是SetOutput
。编辑:
很难给出导致问题的用例的简单示例。例如,我将这个包导入一个运行和退出的简单程序,我可以公开一个方法来关闭日志文件并在该程序完成执行之前调用它(使用Closer
或不使用)。真正的问题是长时间运行的进程(如Web服务器),除非进程终止,否则您不希望关闭日志。
所以我的问题的一部分是,甚至有必要关闭文件吗?