From 825fd724ff5d1c7c0d73f9df9529fbb85ce20adf Mon Sep 17 00:00:00 2001 From: "Stanislav N. aka pztrn" Date: Sat, 29 Feb 2020 23:30:44 +0500 Subject: [PATCH] Some logging refactoring. Fixes #14. --- domains/pastes/paste_post.go | 2 +- domains/pastes/pastes_get.go | 4 +- internal/context/context.go | 8 +-- internal/context/http_server.go | 2 +- internal/database/database.go | 2 +- .../database/dialects/flatfiles/flatfiles.go | 58 +++++++++---------- .../database/dialects/mysql/mysqldatabase.go | 6 +- .../dialects/postgresql/postgresqldatabase.go | 6 +- internal/templater/exported.go | 2 +- 9 files changed, 43 insertions(+), 47 deletions(-) diff --git a/domains/pastes/paste_post.go b/domains/pastes/paste_post.go index 3637805..b6c88c7 100644 --- a/domains/pastes/paste_post.go +++ b/domains/pastes/paste_post.go @@ -142,7 +142,7 @@ func pastePOSTWebInterface(ec echo.Context) error { } newPasteIDAsString := strconv.FormatInt(id, 10) - c.Logger.Debug().Msgf("Paste saved, URL: /paste/" + newPasteIDAsString) + c.Logger.Debug().Msg("Paste saved, URL: /paste/" + newPasteIDAsString) // Private pastes have it's timestamp in URL. if paste.Private { diff --git a/domains/pastes/pastes_get.go b/domains/pastes/pastes_get.go index acf4b60..5516066 100644 --- a/domains/pastes/pastes_get.go +++ b/domains/pastes/pastes_get.go @@ -60,7 +60,7 @@ func pastesGET(ec echo.Context) error { // Get pastes IDs. pastes, err3 := c.Database.GetPagedPastes(page) - c.Logger.Debug().Msgf("Got %d pastes", len(pastes)) + c.Logger.Debug().Int("count", len(pastes)).Msg("Got pastes") var pastesString = "No pastes to show." @@ -102,7 +102,7 @@ func pastesGET(ec echo.Context) error { // Pagination. pages := c.Database.GetPastesPages() - c.Logger.Debug().Msgf("Total pages: %d, current: %d", pages, page) + c.Logger.Debug().Int("total pages", pages).Int("current page", page).Msg("Paging data") paginationHTML := pagination.CreateHTML(page, pages, "/pastes/") pasteListTpl := templater.GetTemplate(ec, "pastelist_list.html", map[string]string{"pastes": pastesString, "pagination": paginationHTML}) diff --git a/internal/context/context.go b/internal/context/context.go index d64a819..306fc8a 100644 --- a/internal/context/context.go +++ b/internal/context/context.go @@ -99,23 +99,23 @@ func (c *Context) LoadConfiguration() { // Normalize file path. normalizedConfigPath, err1 := filepath.Abs(configPath) if err1 != nil { - c.Logger.Fatal().Msgf("Failed to normalize path to configuration file: %s", err1.Error()) + c.Logger.Fatal().Err(err1).Msg("Failed to normalize path to configuration file") } - c.Logger.Debug().Msgf("Configuration file path: %s", configPath) + c.Logger.Debug().Str("path", configPath).Msg("Configuration file path") c.Config = &config.Struct{} // Read configuration file. fileData, err2 := ioutil.ReadFile(normalizedConfigPath) if err2 != nil { - c.Logger.Panic().Msgf("Failed to read configuration file: %s", err2.Error()) + c.Logger.Panic().Err(err2).Msg("Failed to read configuration file") } // Parse it into structure. err3 := yaml.Unmarshal(fileData, c.Config) if err3 != nil { - c.Logger.Panic().Msgf("Failed to parse configuration file: %s", err3.Error()) + c.Logger.Panic().Err(err3).Msg("Failed to parse configuration file") } // Yay! See what it gets! diff --git a/internal/context/http_server.go b/internal/context/http_server.go index feb92fa..44f44d6 100644 --- a/internal/context/http_server.go +++ b/internal/context/http_server.go @@ -26,7 +26,7 @@ func (c *Context) initializeHTTPServer() { go func() { c.Echo.Logger.Fatal(c.Echo.Start(listenAddress)) }() - c.Logger.Info().Msgf("Started HTTP server at %s", listenAddress) + c.Logger.Info().Str("address", listenAddress).Msg("Started HTTP server") } // Wrapper around previous function. diff --git a/internal/database/database.go b/internal/database/database.go index 48e78b6..ef4a5d5 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -75,7 +75,7 @@ func (db *Database) Initialize() { } else if c.Config.Database.Type == "postgresql" { postgresql.New(c) } else { - c.Logger.Fatal().Msgf("Unknown database type: %s", c.Config.Database.Type) + c.Logger.Fatal().Str("type", c.Config.Database.Type).Msg("Unknown database type") } } diff --git a/internal/database/dialects/flatfiles/flatfiles.go b/internal/database/dialects/flatfiles/flatfiles.go index a34c742..b2abbeb 100644 --- a/internal/database/dialects/flatfiles/flatfiles.go +++ b/internal/database/dialects/flatfiles/flatfiles.go @@ -53,23 +53,23 @@ func (ff *FlatFiles) GetDatabaseConnection() *sql.DB { func (ff *FlatFiles) GetPaste(pasteID int) (*structs.Paste, error) { ff.writeMutex.Lock() pastePath := filepath.Join(ff.path, "pastes", strconv.Itoa(pasteID)+".json") - c.Logger.Debug().Msgf("Trying to load paste data from '%s'...", pastePath) + c.Logger.Debug().Str("path", pastePath).Msg("Trying to load paste data") pasteInBytes, err := ioutil.ReadFile(pastePath) if err != nil { - c.Logger.Debug().Msgf("Failed to read paste from storage: %s", err.Error()) + c.Logger.Debug().Err(err).Msg("Failed to read paste from storage") return nil, err } - c.Logger.Debug().Msgf("Loaded %d bytes: %s", len(pasteInBytes), string(pasteInBytes)) + c.Logger.Debug().Int("paste bytes", len(pasteInBytes)).Msg("Loaded paste") ff.writeMutex.Unlock() paste := &structs.Paste{} - err = json.Unmarshal(pasteInBytes, paste) - if err != nil { - c.Logger.Error().Msgf("Failed to parse paste: %s", err.Error()) - return nil, err + err1 := json.Unmarshal(pasteInBytes, paste) + if err1 != nil { + c.Logger.Error().Err(err1).Msgf("Failed to parse paste") + return nil, err1 } return paste, nil @@ -82,8 +82,6 @@ func (ff *FlatFiles) GetPagedPastes(page int) ([]structs.Paste, error) { startPagination = (page - 1) * c.Config.Pastes.Pagination } - c.Logger.Debug().Msgf("Pastes index: %+v", ff.pastesIndex) - // Iteration one - get only public pastes. var publicPastes []*Index @@ -93,8 +91,6 @@ func (ff *FlatFiles) GetPagedPastes(page int) ([]structs.Paste, error) { } } - c.Logger.Debug().Msgf("%+v", publicPastes) - // Iteration two - get paginated pastes. pastesData := make([]structs.Paste, 0) @@ -104,29 +100,29 @@ func (ff *FlatFiles) GetPagedPastes(page int) ([]structs.Paste, error) { } if idx < startPagination { - c.Logger.Debug().Msgf("Paste with index %d isn't in pagination query: too low index", idx) + c.Logger.Debug().Int("paste index", idx).Msg("Paste isn't in pagination query: too low index") continue } if (idx-1 >= startPagination && page > 1 && idx > startPagination+((page-1)*c.Config.Pastes.Pagination)) || (idx-1 >= startPagination && page == 1 && idx > startPagination+(page*c.Config.Pastes.Pagination)) { - c.Logger.Debug().Msgf("Paste with index %d isn't in pagination query: too high index", idx) + c.Logger.Debug().Int("paste index", idx).Msg("Paste isn't in pagination query: too high index") break } - c.Logger.Debug().Msgf("Getting paste data (ID: %d, index: %d)", paste.ID, idx) + c.Logger.Debug().Int("ID", paste.ID).Int("index", idx).Msg("Getting paste data") // Get paste data. pasteData := &structs.Paste{} pasteRawData, err := ioutil.ReadFile(filepath.Join(ff.path, "pastes", strconv.Itoa(paste.ID)+".json")) if err != nil { - c.Logger.Error().Msgf("Failed to read paste data: %s", err.Error()) + c.Logger.Error().Err(err).Msg("Failed to read paste data") continue } - err = json.Unmarshal(pasteRawData, pasteData) - if err != nil { - c.Logger.Error().Msgf("Failed to parse paste data: %s", err.Error()) + err1 := json.Unmarshal(pasteRawData, pasteData) + if err1 != nil { + c.Logger.Error().Err(err1).Msg("Failed to parse paste data") continue } @@ -181,18 +177,18 @@ func (ff *FlatFiles) Initialize() { // Create directory if necessary. if _, err := os.Stat(ff.path); err != nil { - c.Logger.Debug().Msgf("Directory '%s' does not exist, creating...", ff.path) + c.Logger.Debug().Str("directory", ff.path).Msg("Directory does not exist, creating...") _ = os.MkdirAll(ff.path, os.ModePerm) } else { - c.Logger.Debug().Msgf("Directory '%s' already exists", ff.path) + c.Logger.Debug().Str("directory", ff.path).Msg("Directory already exists") } // Create directory for pastes. if _, err := os.Stat(filepath.Join(ff.path, "pastes")); err != nil { - c.Logger.Debug().Msgf("Directory '%s' does not exist, creating...", filepath.Join(ff.path, "pastes")) + c.Logger.Debug().Str("directory", ff.path).Msg("Directory does not exist, creating...") _ = os.MkdirAll(filepath.Join(ff.path, "pastes"), os.ModePerm) } else { - c.Logger.Debug().Msgf("Directory '%s' already exists", filepath.Join(ff.path, "pastes")) + c.Logger.Debug().Str("directory", ff.path).Msg("Directory already exists") } // Load pastes index. @@ -205,12 +201,12 @@ func (ff *FlatFiles) Initialize() { c.Logger.Fatal().Msg("Failed to read contents of index file!") } - err = json.Unmarshal(indexData, &ff.pastesIndex) - if err != nil { - c.Logger.Error().Msgf("Failed to parse index file contents from JSON into internal structure. Will create new index file. All of your previous pastes will became unavailable. Error was: %s", err.Error()) + err1 := json.Unmarshal(indexData, &ff.pastesIndex) + if err1 != nil { + c.Logger.Error().Err(err1).Msg("Failed to parse index file contents from JSON into internal structure. Will create new index file. All of your previous pastes will became unavailable.") } - c.Logger.Debug().Msgf("Parsed pastes index: %+v", ff.pastesIndex) + c.Logger.Debug().Int("pastes count", len(ff.pastesIndex)).Msg("Parsed pastes index") } } @@ -221,7 +217,7 @@ func (ff *FlatFiles) SavePaste(p *structs.Paste) (int64, error) { pasteID := len(filesOnDisk) + 1 p.ID = pasteID - c.Logger.Debug().Msgf("Writing paste to disk, ID will be " + strconv.Itoa(pasteID)) + c.Logger.Debug().Int("new paste ID", pasteID).Msg("Writing paste to disk") data, err := json.Marshal(p) if err != nil { @@ -250,13 +246,13 @@ func (ff *FlatFiles) Shutdown() { indexData, err := json.Marshal(ff.pastesIndex) if err != nil { - c.Logger.Error().Msgf("Failed to encode index data into JSON: %s", err.Error()) + c.Logger.Error().Err(err).Msg("Failed to encode index data into JSON") return } - err = ioutil.WriteFile(filepath.Join(ff.path, "pastes", "index.json"), indexData, 0644) - if err != nil { - c.Logger.Error().Msgf("Failed to write index data to file. Pretty sure that you've lost your pastes.") + err1 := ioutil.WriteFile(filepath.Join(ff.path, "pastes", "index.json"), indexData, 0644) + if err1 != nil { + c.Logger.Error().Err(err1).Msg("Failed to write index data to file. Pretty sure that you've lost your pastes.") return } } diff --git a/internal/database/dialects/mysql/mysqldatabase.go b/internal/database/dialects/mysql/mysqldatabase.go index 34d3e68..9523010 100644 --- a/internal/database/dialects/mysql/mysqldatabase.go +++ b/internal/database/dialects/mysql/mysqldatabase.go @@ -152,11 +152,11 @@ func (db *Database) Initialize() { } dbConnString := fmt.Sprintf("%s@tcp(%s:%s)/%s?parseTime=true&collation=utf8mb4_unicode_ci&charset=utf8mb4", userpass, c.Config.Database.Address, c.Config.Database.Port, c.Config.Database.Database) - c.Logger.Debug().Msgf("Database connection string: %s", dbConnString) + c.Logger.Debug().Str("DSN", dbConnString).Msgf("Database connection string composed") dbConn, err := sqlx.Connect("mysql", dbConnString) if err != nil { - c.Logger.Error().Msgf("Failed to connect to database: %s", err.Error()) + c.Logger.Error().Err(err).Msg("Failed to connect to database") return } @@ -192,7 +192,7 @@ func (db *Database) Shutdown() { if db.db != nil { err := db.db.Close() if err != nil { - c.Logger.Error().Msgf("Failed to close database connection: %s", err.Error()) + c.Logger.Error().Err(err).Msg("Failed to close database connection") } } } diff --git a/internal/database/dialects/postgresql/postgresqldatabase.go b/internal/database/dialects/postgresql/postgresqldatabase.go index bb93397..a2e2909 100644 --- a/internal/database/dialects/postgresql/postgresqldatabase.go +++ b/internal/database/dialects/postgresql/postgresqldatabase.go @@ -165,11 +165,11 @@ func (db *Database) Initialize() { } dbConnString := fmt.Sprintf("postgres://%s@%s:%s/%s?connect_timeout=10&fallback_application_name=fastpastebin&sslmode=disable", userpass, c.Config.Database.Address, c.Config.Database.Port, c.Config.Database.Database) - c.Logger.Debug().Msgf("Database connection string: %s", dbConnString) + c.Logger.Debug().Str("DSN", dbConnString).Msg("Database connection string composed") dbConn, err := sqlx.Connect("postgres", dbConnString) if err != nil { - c.Logger.Error().Msgf("Failed to connect to database: %s", err.Error()) + c.Logger.Error().Err(err).Msg("Failed to connect to database") return } @@ -204,7 +204,7 @@ func (db *Database) Shutdown() { if db.db != nil { err := db.db.Close() if err != nil { - c.Logger.Error().Msgf("Failed to close database connection: %s", err.Error()) + c.Logger.Error().Err(err).Msg("Failed to close database connection") } } } diff --git a/internal/templater/exported.go b/internal/templater/exported.go index 3baed2a..857a69e 100644 --- a/internal/templater/exported.go +++ b/internal/templater/exported.go @@ -73,7 +73,7 @@ func GetRawTemplate(ec echo.Context, templateName string, data map[string]string // GetTemplate returns formatted template that can be outputted to client. func GetTemplate(ec echo.Context, name string, data map[string]string) string { - log.Debug().Msgf("Requested template '%s'", name) + log.Debug().Str("name", name).Msg("Requested template") // Getting main template. mainhtml, err := static.ReadFile("main.html")