func main() { // Open appending or create the access log. accessLogFile, err := os.OpenFile("access.log", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666) if err != nil { log.Fatalf("Error using assess.log: %s", err.Error()) } defer accessLogFile.Close() // Create a buffered writer and ensure it is flushed when an interrupt occurs. bufferedAccessLogWriter := bufio.NewWriter(accessLogFile) c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { <-c log.Println("Flushing logs and exiting...") bufferedAccessLogWriter.Flush() os.Exit(0) }() mux := http.DefaultServeMux mux.HandleFunc("/", indexHandler) loggingHandler := NewApacheLoggingHandler(mux, bufferedAccessLogWriter) server := &http.Server{ Addr: ":8000", Handler: loggingHandler, } server.ListenAndServe() }