about summary refs log blame commit diff stats
path: root/logging.go
blob: 311aa8b0045097c059dd2e0aa77481fa2caac1dd (plain) (tree)
1
2
3
4
5
6
7
8
9





                  
            

 






















                                                                                       














                                                                                                             
package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

var logChan = make(chan struct{})

func initLogging() {
	logfile, err := os.OpenFile("api.log", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0644)
	if err != nil {
		log.SetOutput(os.Stderr)
		log.Printf("Log init error: %s", err.Error())
		return
	}

	go func(*os.File) {
		<-logChan
		log.Printf("Closing log file ...")
		err := logfile.Close()
		if err != nil {
			log.SetOutput(os.Stderr)
			log.Printf("Error closing log file: %s", err.Error())
		}
	}(logfile)

	log.SetOutput(logfile)
}

// Appends a 200 OK to the request log
func log200(r *http.Request) {
	useragent := r.Header["User-Agent"]
	uip := getIPFromCtx(r.Context())
	log.Printf("*** %v :: 200 :: %v %v :: %v\n", uip, r.Method, r.URL, useragent)
}

// Appends a request of a given status code to the request
// log. Intended for errors.
func errHTTP(w http.ResponseWriter, r *http.Request, err error, code int) {
	useragent := r.Header["User-Agent"]
	uip := getIPFromCtx(r.Context())
	log.Printf("*** %v :: %v :: %v %v :: %v :: %v\n", uip, code, r.Method, r.URL, useragent, err.Error())
	http.Error(w, fmt.Sprintf("Error %v: %v", code, err.Error()), code)
}