diff --git a/packer.go b/packer.go index 04acf0ff9..17a80b075 100644 --- a/packer.go +++ b/packer.go @@ -14,12 +14,24 @@ import ( ) func main() { + // Setup logging if PACKER_LOG is set. + // Log to PACKER_LOG_PATH if it is set, otherwise default to stderr. if os.Getenv("PACKER_LOG") == "" { // If we don't have logging explicitly enabled, then disable it log.SetOutput(ioutil.Discard) } else { - // Logging is enabled, make sure it goes to stderr - log.SetOutput(os.Stderr) + if log_path := os.Getenv("PACKER_LOG_PATH"); log_path == "" { + log.SetOutput(os.Stderr) + } else { + file, err := os.OpenFile(log_path, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0600) + if err == nil { + log.SetOutput(file) + } else { + // Problem opening the file, fail back to Stderr + log.SetOutput(os.Stderr) + log.Printf("Could not open %s for logging (%s). Using stderr instead.", log_path, err.Error()) + } + } } // If there is no explicit number of Go threads to use, then set it