Refactored main.go into cmd/jobsearch/main.go (in case separate commands are introduced later) which has required the options mechanism to change slightly as well as the logging.

This commit is contained in:
bwilliams committed 2026-10-09 09:29:42 +01:00
1 parent de3ebf68c5
commit 6436253629
14 files changed
+273 -224

No files matched your search

+42 -17
View File
@@ -26,24 +26,11 @@ import (
)
var logLevel slog.LevelVar
var fileLogger *os.File
// Set up the logger using defaults
func Init() {
logLevel.Set(slog.LevelWarn)
opts := &slog.HandlerOptions{
Level: &logLevel,
}
handler := slog.NewTextHandler(os.Stdout, opts)
logger := slog.New(handler)
slog.SetDefault(logger)
}
// Enable info level logging
func EnableInfo() {
if logLevel.Level() > slog.LevelInfo {
logLevel.Set(slog.LevelInfo)
slog.Info("Info logging enabled")
}
// Set the logging to a particular level, quietly
func SetLevel(level slog.Level) {
logLevel.Set(level)
}
// Enable debug level logging
@@ -54,6 +41,36 @@ func EnableDebug() {
}
}
func LogToFile(logfile string) error {
if fileLogger != nil {
(*fileLogger).Close()
}
// Open the log file
fileLogger, err := os.OpenFile(logfile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
return err
}
opts := &slog.HandlerOptions{
Level: &logLevel,
}
handler := slog.NewJSONHandler(fileLogger, opts)
logger := slog.New(handler)
slog.SetDefault(logger)
return nil
}
func Shutdown() error {
var err error = nil
if fileLogger != nil {
err = (*fileLogger).Close()
fileLogger = nil
}
return err
}
func LogToTerminal() {
opts := &tint.Options{
Level: &logLevel,
@@ -94,3 +111,11 @@ func IsJSONHandler(h slog.Handler) bool {
// Read the boolean value using unsafe
return *(*bool)(unsafe.Pointer(jsonField.UnsafeAddr()))
}
func IsFileLogger() bool {
return fileLogger != nil
}
func IsDebugEnabled() bool {
return logLevel.Level() <= slog.LevelDebug
}