1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-09-04 10:06:24 -07:00

Use zerolog for logging to console (with few exceptions) for consistency

This commit is contained in:
Eggbertx 2025-03-29 14:04:43 -07:00
parent 48fb11a199
commit 47afdd0ca8
5 changed files with 61 additions and 74 deletions

View file

@ -37,26 +37,30 @@ func cleanup() {
}
func main() {
fmt.Printf("Starting gochan v%s\n", versionStr)
gcutil.LogInfo().Str("version", versionStr).Msg("Starting gochan")
fatalEv := gcutil.LogFatal()
defer func() {
fatalEv.Discard()
cleanup()
}()
err := config.InitConfig(versionStr)
if err != nil {
jsonLocation := config.JSONLocation()
if jsonLocation != "" {
fmt.Printf("Failed to load configuration from %q: %s\n", jsonLocation, err.Error())
} else {
fmt.Printf("Failed to load configuration: %s\n", err.Error())
}
cleanup()
os.Exit(1)
fatalEv.Err(err).Caller().
Str("jsonLocation", config.JSONLocation()).
Msg("Unable to load configuration")
}
uid, gid := config.GetUser()
systemCritical := config.GetSystemCriticalConfig()
if err = gcutil.InitLogs(systemCritical.LogDir, zerolog.InfoLevel, uid, gid); err != nil {
fmt.Println("Error opening logs:", err.Error())
cleanup()
os.Exit(1)
if err = gcutil.InitLogs(systemCritical.LogDir, systemCritical.LogLevel(), uid, gid); err != nil {
fatalEv.Err(err).Caller().
Str("logDir", systemCritical.LogDir).
Int("uid", uid).
Int("gid", gid).
Msg("Unable to open logs")
}
fatalEv.Discard()
fatalEv = gcutil.LogFatal() // reset fatalEv to use log file
testIP := os.Getenv("GC_TESTIP")
if testIP != "" {
@ -65,16 +69,13 @@ func main() {
}
if err = gcplugin.LoadPlugins(systemCritical.Plugins); err != nil {
cleanup()
gcutil.LogFatal().Err(err).Msg("failed loading plugins")
fatalEv.Err(err).Msg("Failed loading plugins")
}
events.TriggerEvent("startup")
if err = gcsql.ConnectToDB(&systemCritical.SQLConfig); err != nil {
fmt.Println("Failed to connect to the database:", err.Error())
cleanup()
gcutil.LogFatal().Err(err).Msg("Failed to connect to the database")
fatalEv.Err(err).Msg("Failed to connect to the database")
}
events.TriggerEvent("db-connected")
gcutil.LogInfo().
@ -87,33 +88,25 @@ func main() {
gcutil.LogFatal().Err(err).Msg("Failed to initialize the database")
}
events.TriggerEvent("db-initialized")
events.RegisterEvent([]string{"db-views-reset"}, func(_ string, _ ...any) error {
gcutil.LogInfo().Msg("SQL views reset")
return nil
})
if err = gcsql.ResetViews(); err != nil {
gcutil.LogFatal().Err(err).Caller().Msg("Failed resetting SQL views")
fatalEv.Err(err).Caller().Msg("Failed resetting SQL views")
}
parseCommandLine()
parseCommandLine(fatalEv)
serverutil.InitMinifier()
siteCfg := config.GetSiteConfig()
if err = geoip.SetupGeoIP(siteCfg.GeoIPType, siteCfg.GeoIPOptions); err != nil {
cleanup()
gcutil.LogFatal().Err(err).Msg("Unable to initialize GeoIP")
fatalEv.Err(err).Caller().Msg("Unable to initialize GeoIP")
}
posting.InitCaptcha()
if err = gctemplates.InitTemplates(); err != nil {
fmt.Println("Failed initializing templates:", err.Error())
cleanup()
gcutil.LogFatal().Err(err).Send()
fatalEv.Err(err).Caller().Msg("Unable to initialize templates")
}
for _, board := range gcsql.AllBoards {
if _, err = board.DeleteOldThreads(); err != nil {
cleanup()
gcutil.LogFatal().Err(err).Caller().
fatalEv.Err(err).Caller().
Str("board", board.Dir).
Msg("Failed deleting old threads")
}
@ -122,18 +115,13 @@ func main() {
sc := make(chan os.Signal, 1)
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
posting.InitPosting()
if err = gcutil.InitLogs(systemCritical.LogDir, systemCritical.LogLevel(), uid, gid); err != nil {
fmt.Println("Error opening logs:", err.Error())
cleanup()
os.Exit(1) // skipcq: CRT-D0011
}
defer events.TriggerEvent("shutdown")
manage.InitManagePages()
go initServer()
<-sc
}
func parseCommandLine() {
func parseCommandLine(fatalEv *zerolog.Event) {
var newstaff string
var delstaff string
var rebuild string
@ -157,7 +145,7 @@ func parseCommandLine() {
rebuildFlag = buildAll
}
if rebuildFlag > 0 {
startupRebuild(rebuildFlag)
startupRebuild(rebuildFlag, fatalEv)
}
if newstaff != "" {
@ -166,21 +154,16 @@ func parseCommandLine() {
flag.Usage()
os.Exit(1)
}
fmt.Printf("Creating new staff: %q, with password: %q and rank: %d from command line", arr[0], arr[1], rank)
if _, err = gcsql.NewStaff(arr[0], arr[1], rank); err != nil {
fmt.Printf("Failed creating new staff account for %q: %s\n", arr[0], err.Error())
gcutil.LogFatal().Err(err).Caller().
Str("staff", "add").
fatalEv.Err(err).Caller().
Str("source", "commandLine").
Str("username", arr[0]).
Msg("Failed creating new staff account")
}
gcutil.LogInfo().
Str("staff", "add").
Str("source", "commandLine").
Str("username", arr[0]).
Msg("New staff account created")
fmt.Printf("New staff account created: %s\n", arr[0])
os.Exit(0)
}
if delstaff != "" {
@ -195,10 +178,12 @@ func parseCommandLine() {
answer = strings.ToLower(answer)
if answer == "y" || answer == "yes" {
if err = gcsql.DeactivateStaff(delstaff); err != nil {
fmt.Printf("Error deleting %q: %s", delstaff, err.Error())
gcutil.LogFatal().Str("staff", "delete").Err(err).Send()
fatalEv.Err(err).Caller().
Str("source", "commandLine").
Str("username", delstaff).
Msg("Unable to delete staff account")
}
gcutil.LogInfo().Str("newStaff", delstaff).Send()
gcutil.LogInfo().Str("newStaff", delstaff).Msg("Staff account deleted")
} else {
fmt.Println("Not deleting.")
}

View file

@ -1,7 +1,6 @@
package main
import (
"fmt"
"os"
"github.com/gochan-org/gochan/pkg/building"
@ -9,6 +8,7 @@ import (
"github.com/gochan-org/gochan/pkg/gctemplates"
"github.com/gochan-org/gochan/pkg/gcutil"
"github.com/gochan-org/gochan/pkg/server/serverutil"
"github.com/rs/zerolog"
)
const (
@ -19,53 +19,48 @@ const (
buildAll = buildBoards | buildFront | buildJS
)
func startupRebuild(buildFlag int) {
func startupRebuild(buildFlag int, fatalEv *zerolog.Event) {
var err error
serverutil.InitMinifier()
if err = gctemplates.InitTemplates(); err != nil {
fmt.Println("Error initializing templates:", err.Error())
gcutil.Logger().Fatal().
fatalEv.Err(err).Caller().
Str("building", "initialization").
Err(err).Send()
Msg("Unable to initialize templates")
}
if buildFlag&buildBoards > 0 {
gcsql.ResetBoardSectionArrays()
if err = building.BuildBoardListJSON(); err != nil {
fmt.Println("Error building section array:", err.Error())
gcutil.Logger().Fatal().
fatalEv.Err(err).Caller().
Str("building", "sections").
Err(err).Send()
Msg("Unable to build section array")
}
if err = building.BuildBoards(true); err != nil {
fmt.Println("Error building boards:", err.Error())
gcutil.Logger().Fatal().
fatalEv.Err(err).Caller().
Str("building", "boards").
Err(err).Send()
Msg("Unable to build boards")
}
fmt.Println("Boards built successfully")
gcutil.LogInfo().Msg("Boards built successfully")
}
if buildFlag&buildJS > 0 {
if err = building.BuildJS(); err != nil {
fmt.Println("Error building JS:", err.Error())
gcutil.Logger().Fatal().
fatalEv.Err(err).Caller().
Str("building", "js").
Err(err).Send()
Msg("Unable to build consts.js")
}
fmt.Println("JavaScript built successfully")
gcutil.LogInfo().Msg("consts.js built successfully")
}
if buildFlag&buildFront > 0 {
if err = building.BuildFrontPage(); err != nil {
fmt.Println("Error building front page:", err.Error())
gcutil.Logger().Fatal().
fatalEv.Err(err).Caller().
Str("building", "front").
Err(err).Send()
Msg("Unable to build front page")
}
fmt.Println("Front page built successfully")
gcutil.LogInfo().Msg("Front page built successfully")
}
fmt.Println("Finished building without errors, exiting.")
gcutil.LogInfo().Msg("Finished building without errors, exiting.")
os.Exit(0)
}

View file

@ -84,7 +84,9 @@ func updateAnnouncementsCallback(_ http.ResponseWriter, request *http.Request, s
Msg("Unable to update announcement")
return "", errors.New("unable to update announcement")
}
fmt.Printf("Updated announcement #%d, message = %s\n", announcement.ID, announcement.Message)
gcutil.LogInfo().
Int("announcementID", int(announcement.ID)).
Msg("Updated announcement")
}
} else if deleteIdStr != "" {
if deleteID, err = strconv.Atoi(deleteIdStr); err != nil {

View file

@ -1,6 +1,7 @@
package posting
import (
"bytes"
"encoding/json"
"errors"
"fmt"
@ -105,19 +106,24 @@ func ServeCaptcha(writer http.ResponseWriter, request *http.Request) {
if request.Method == "POST" {
result, err := submitCaptchaResponse(request)
if err != nil {
errEv.Err(err).Caller().Send()
errEv.Err(err).Caller().Msg("Error submitting CAPTCHA")
server.ServeError(writer, "Error checking CAPTCHA results: "+err.Error(), wantsJSON, nil)
return
}
fmt.Println("Success:", result)
gcutil.LogInfo().
Bool("result", result).
Str("IP", gcutil.GetRealIP(request)).
Msg("Got CAPTCHA result")
}
var buf bytes.Buffer
err := serverutil.MinifyTemplate(gctemplates.Captcha, map[string]any{
"boardConfig": config.GetBoardConfig(""),
"boards": gcsql.AllBoards,
"siteKey": captchaCfg.SiteKey,
}, writer, "text/html")
}, &buf, "text/html")
if err != nil {
errEv.Err(err).Caller().Send()
errEv.Err(err).Caller().Msg("Unable to build CAPTCHA template")
server.ServeError(writer, "Error serving CAPTCHA: "+err.Error(), wantsJSON, nil)
}
buf.WriteTo(writer)
}

View file

@ -553,7 +553,6 @@ func MakePost(writer http.ResponseWriter, request *http.Request) {
// prune posts from cyclic thread
for _, prunePost := range toBePruned {
fmt.Printf("%#v\n", prunePost)
p := &gcsql.Post{ID: prunePost.PostID, ThreadID: prunePost.ThreadID}
if err = p.Delete(); err != nil {