Browse Source

Improved logging

Czajkowski, Piotr 6 years ago
parent
commit
2f6987c9ac
2 changed files with 39 additions and 23 deletions
  1. 37 21
      logger.go
  2. 2 2
      server.go

+ 37 - 21
logger.go

@@ -1,48 +1,64 @@
 package main
 
 import (
+	"encoding/csv"
 	"log"
 	"net"
 	"net/http"
 	"os"
 	"path/filepath"
 	"time"
+	"strconv"
 )
 
-// GetInfoFromRequest reads information from given request and returns them as tuple.
-func GetInfoFromRequest(r *http.Request) (string, string, string) {
-	host, _, _ := net.SplitHostPort(r.RemoteAddr)
-	searchPhrase := r.URL.Query().Get("phrase")
+const (
+	timeFormat = "2006-01-02 15:04"
+	dateFormat = "20060102"
+)
+
+type searchInfo struct {
+	Date time.Time
+	Host, Phrase, Language string
+	ResultsServed int
+}
+
+func (s *searchInfo) ToArray() []string {
+	return []string{s.Date.Format(timeFormat), s.Host, s.Phrase, s.Language, strconv.Itoa(s.ResultsServed)}
+}
+
+func getInfoFromRequest(r *http.Request) searchInfo {
+	info := searchInfo{Date: time.Now()}
+	info.Host, _, _ = net.SplitHostPort(r.RemoteAddr)
+	info.Phrase = r.URL.Query().Get("phrase")
+
 	language := r.URL.Query().Get("lang")
 	if language == "" {
-		language = "All languages"
+		info.Language = "All languages"
 	} else {
-		language = app.Languages[language]
+		info.Language = app.Languages[language]
 	}
 
-	return host, searchPhrase, language
+	return info
 }
 
-// GetLogger returns new logger
-func GetLogger() *log.Logger {
-	logFile := filepath.Join("log", (time.Now().Format("20060102") + ".log"))
+func getWriter() *csv.Writer {
+	logFile := filepath.Join("log", (time.Now().Format(dateFormat) + ".log"))
 	logOutput, err := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
 	if err != nil {
 		log.Fatalf("Error creating log file: %v", err)
 	}
 
-	logger := log.New(logOutput, "", log.Ldate|log.Ltime)
-	return logger
+	writer := csv.NewWriter(logOutput)
+	return writer
 }
 
-// Logger main function, saves event to the log.
-func Logger(r *http.Request, resultsServed int) {
-	host, searchPhrase, language := GetInfoFromRequest(r)
-	logger := GetLogger()
+// WriteLog main function, saves event to the log.
+func WriteLog(r *http.Request, resultsServed int) {
+	info := getInfoFromRequest(r)
+	info.ResultsServed = resultsServed
 
-	if searchPhrase != "" {
-		logger.Printf(",%v,\"%v\",\"%v\",%v\n", host, searchPhrase, language, resultsServed)
-	} else {
-		logger.Printf(",%v,TMS,\"%v\",%v\n", host, language, resultsServed)
-	}
+	writer := getWriter()
+
+	writer.Write(info.ToArray())
+	writer.Flush()
 }

+ 2 - 2
server.go

@@ -34,7 +34,7 @@ func DisplaySearchResults(w http.ResponseWriter, r *http.Request) {
 		var searchResults SearchResults
 		if language == "" || app.CheckLanguage(language) {
 			searchResults = app.Search(app.GetTMs(language), searchPhrase)
-			Logger(r, searchResults.TotalResults)
+			WriteLog(r, searchResults.TotalResults)
 		} else {
 			errorPage.Execute(w, "Language not valid!")
 			return
@@ -59,7 +59,7 @@ func DisplayTMs(w http.ResponseWriter, r *http.Request) {
 	var TMList []TM
 	if language == "" || app.CheckLanguage(language) {
 		TMList = app.GetTMs(language)
-		Logger(r, len(TMList))
+		WriteLog(r, len(TMList))
 	} else {
 		errorPage.Execute(w, "Language not valid!")
 		return