Am trying to create a logger which outputs to a file instead of the stdout. I instantiated the logger in the init function but it doesn’t work out of the init func, like i can’t write logs anymore if am doing it out of the init function.
Here is a sample of the code
var logger *log.Logger
func init() {
logFile, err := os.OpenFile("app-log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664)
if err != nil {
fmt.Println("Failed to create the log file")
fmt.Println(err)
os.Exit(1)
}
defer logFile.Close()
logger = log.New(logFile, "log-prefix-here:", log.Ldate)
}
Then if i try to invoke the logger in another function, it just doesn’t work!!
I found the reason why the logger wasn’t writing anything to the log file. It’s because the file would be closed when the init function ends thus preventing the logger from writing to it. The solution i found is to make the file a package level variable then move the file.Close() call inside the main function so that the file gets closed when the program exits.