search and/or read your saved and liked bluesky posts
wails
go
svelte
sqlite
desktop
bluesky
1package main
2
3import (
4 "fmt"
5 "log"
6 "os"
7)
8
9// AppLogger provides application logging that writes to both file and Wails events
10type AppLogger struct {
11 stdLogger *log.Logger
12 service *LogService
13}
14
15var appLogger *AppLogger
16
17// InitLogger initializes the application logger with the log service
18func InitLogger(service *LogService) {
19 multiWriter := service.GetMultiWriter()
20 appLogger = &AppLogger{
21 stdLogger: log.New(multiWriter, "", log.LstdFlags|log.Lshortfile),
22 service: service,
23 }
24
25 log.SetOutput(multiWriter)
26}
27
28// GetLogger returns the global app logger
29func GetLogger() *AppLogger {
30 if appLogger == nil {
31 return &AppLogger{
32 stdLogger: log.New(os.Stdout, "", log.LstdFlags),
33 }
34 }
35 return appLogger
36}
37
38// Debug logs a debug message
39func (l *AppLogger) Debug(msg string) {
40 l.stdLogger.Printf("[DEBUG] %s", msg)
41}
42
43// Debugf logs a formatted debug message
44func (l *AppLogger) Debugf(format string, args ...interface{}) {
45 l.stdLogger.Printf("[DEBUG] "+format, args...)
46}
47
48// Info logs an info message
49func (l *AppLogger) Info(msg string) {
50 l.stdLogger.Printf("[INFO] %s", msg)
51}
52
53// Infof logs a formatted info message
54func (l *AppLogger) Infof(format string, args ...interface{}) {
55 l.stdLogger.Printf("[INFO] "+format, args...)
56}
57
58// Warn logs a warning message
59func (l *AppLogger) Warn(msg string) {
60 l.stdLogger.Printf("[WARN] %s", msg)
61}
62
63// Warnf logs a formatted warning message
64func (l *AppLogger) Warnf(format string, args ...interface{}) {
65 l.stdLogger.Printf("[WARN] "+format, args...)
66}
67
68// Error logs an error message
69func (l *AppLogger) Error(msg string) {
70 l.stdLogger.Printf("[ERROR] %s", msg)
71}
72
73// Errorf logs a formatted error message
74func (l *AppLogger) Errorf(format string, args ...interface{}) {
75 l.stdLogger.Printf("[ERROR] "+format, args...)
76}
77
78// Fatal logs a fatal message and exits
79func (l *AppLogger) Fatal(msg string) {
80 l.stdLogger.Fatalf("[FATAL] %s", msg)
81}
82
83// Fatalf logs a formatted fatal message and exits
84func (l *AppLogger) Fatalf(format string, args ...interface{}) {
85 l.stdLogger.Fatalf("[FATAL] "+format, args...)
86}
87
88// Convenience functions that use the global logger
89func LogDebug(msg string) {
90 GetLogger().Debug(msg)
91}
92
93func LogDebugf(format string, args ...interface{}) {
94 GetLogger().Debugf(format, args...)
95}
96
97func LogInfo(msg string) {
98 GetLogger().Info(msg)
99}
100
101func LogInfof(format string, args ...interface{}) {
102 GetLogger().Infof(format, args...)
103}
104
105func LogWarn(msg string) {
106 GetLogger().Warn(msg)
107}
108
109func LogWarnf(format string, args ...interface{}) {
110 GetLogger().Warnf(format, args...)
111}
112
113func LogError(msg string) {
114 GetLogger().Error(msg)
115}
116
117func LogErrorf(format string, args ...interface{}) {
118 GetLogger().Errorf(format, args...)
119}
120
121func LogFatal(msg string) {
122 GetLogger().Fatal(msg)
123}
124
125func LogFatalf(format string, args ...interface{}) {
126 GetLogger().Fatalf(format, args...)
127}
128
129// String returns a string representation of the logger
130func (l *AppLogger) String() string {
131 return fmt.Sprintf("AppLogger{initialized: %v}", l.service != nil)
132}