logger.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net"
  6. "net/http"
  7. "os"
  8. "path/filepath"
  9. "time"
  10. )
  11. // GetInfoFromRequest reads information from given request and returns them as tuple.
  12. func GetInfoFromRequest(r *http.Request) (string, string, string) {
  13. host, _, _ := net.SplitHostPort(r.RemoteAddr)
  14. searchPhrase := r.URL.Query().Get("phrase")
  15. language := r.URL.Query().Get("lang")
  16. if language == "" {
  17. language = "All languages"
  18. } else {
  19. language = app.Languages[language]
  20. }
  21. return host, searchPhrase, language
  22. }
  23. // WriteLog writes log entry to the file.
  24. func WriteLog(logString string) error {
  25. logFile := filepath.Join("log", (time.Now().Format("200612") + ".log"))
  26. logOutput, err := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
  27. if err != nil {
  28. return err
  29. }
  30. defer logOutput.Close()
  31. _, err = logOutput.WriteString(logString)
  32. return err
  33. }
  34. // Logger main function, saves event to the log.
  35. func Logger(r *http.Request, resultsServed int) {
  36. host, searchPhrase, language := GetInfoFromRequest(r)
  37. timeFormat := "2006-01-02 15:04:05"
  38. var logString string
  39. if searchPhrase != "" {
  40. logString = fmt.Sprintf("%v,%v,\"%v\",\"%v\",%v\n", time.Now().Format(timeFormat), host, searchPhrase, language, resultsServed)
  41. } else {
  42. logString = fmt.Sprintf("%v,%v,TMS,\"%v\",%v\n", time.Now().Format(timeFormat), host, language, resultsServed)
  43. }
  44. err := WriteLog(logString)
  45. if err != nil {
  46. log.Fatalf("Error writing log: %v", err)
  47. }
  48. }