|
15 | 15 | package logger |
16 | 16 |
|
17 | 17 | import ( |
18 | | - "log" |
| 18 | + "fmt" |
| 19 | + "log/slog" |
19 | 20 | "os" |
| 21 | + "path/filepath" |
| 22 | + "strings" |
20 | 23 | ) |
21 | 24 |
|
22 | | -const logFileLocation = "/var/log/jfrog-credential-provider.log" |
23 | | -const logPrefix = "[JFROG CREDENTIALS PROVIDER] " |
| 25 | +const logFileLocation = "/var/log/jfrog-credentials-provider/jfrog-credentials-provider.log" |
24 | 26 |
|
25 | 27 | type Logger struct { |
26 | | - Logger *log.Logger |
| 28 | + Logger *slog.Logger |
27 | 29 | } |
28 | 30 |
|
29 | 31 | func NewLogger() (*Logger, error) { |
| 32 | + if err := os.MkdirAll(filepath.Dir(logFileLocation), 0755); err != nil { |
| 33 | + return nil, err |
| 34 | + } |
30 | 35 | logFile, err := os.OpenFile(logFileLocation, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) |
31 | 36 | if err != nil { |
32 | 37 | return nil, err |
33 | 38 | } |
| 39 | + |
| 40 | + level := slog.LevelInfo |
| 41 | + if strings.EqualFold(os.Getenv("log_level"), "debug") { |
| 42 | + level = slog.LevelDebug |
| 43 | + } |
| 44 | + |
| 45 | + handler := slog.NewJSONHandler(logFile, &slog.HandlerOptions{ |
| 46 | + AddSource: true, |
| 47 | + Level: level, |
| 48 | + }) |
| 49 | + |
34 | 50 | return &Logger{ |
35 | | - Logger: log.New(logFile, logPrefix, log.Ldate|log.Ltime|log.Lshortfile), |
| 51 | + Logger: slog.New(handler), |
36 | 52 | }, nil |
37 | 53 | } |
38 | 54 |
|
39 | 55 | func (l *Logger) Info(message interface{}) { |
40 | | - l.Logger.Println("[INFO] " + formatMessage(message)) |
| 56 | + l.Logger.Info(toStr(message)) |
41 | 57 | } |
42 | 58 |
|
43 | 59 | func (l *Logger) Debug(message interface{}) { |
44 | | - l.Logger.Println("[DEBUG] " + formatMessage(message)) |
| 60 | + l.Logger.Debug(toStr(message)) |
45 | 61 | } |
46 | 62 |
|
47 | 63 | func (l *Logger) Error(message interface{}) { |
48 | | - l.Logger.Println("[ERROR] " + formatMessage(message)) |
| 64 | + l.Logger.Error(toStr(message)) |
49 | 65 | } |
50 | 66 |
|
51 | 67 | func (l *Logger) Exit(message interface{}, code int) { |
52 | | - l.Logger.Println("[EXIT] " + formatMessage(message)) |
| 68 | + l.Logger.Error(toStr(message)) |
53 | 69 | os.Exit(code) |
54 | 70 | } |
55 | 71 |
|
56 | | -func formatMessage(message interface{}) string { |
| 72 | +func toStr(message interface{}) string { |
57 | 73 | switch v := message.(type) { |
58 | 74 | case string: |
59 | 75 | return v |
60 | 76 | case error: |
61 | 77 | return v.Error() |
62 | 78 | default: |
63 | | - return "unknown message type" |
| 79 | + return fmt.Sprintf("%v", v) |
64 | 80 | } |
65 | 81 | } |
0 commit comments