Skip to content

Commit 9679753

Browse files
committed
refactor: added mode and mode named Logger interfaces and implementations
1 parent 806dba3 commit 9679753

File tree

5 files changed

+226
-0
lines changed

5 files changed

+226
-0
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
module github.com/ralvarezdev/go-logger
22

33
go 1.23.4
4+
5+
require github.com/ralvarezdev/go-flags v0.3.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
github.com/ralvarezdev/go-flags v0.3.0 h1:JItUzutZKiVsYxQGRjF9DsGTBvRo3ScadMz5s6YUcKY=
2+
github.com/ralvarezdev/go-flags v0.3.0/go.mod h1:R3yVBYvzwqfOp26LidaiJ/zftVAnPC3pKunVpV/vosE=

mode/constants.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package mode
2+
3+
import (
4+
goflagsmode "github.com/ralvarezdev/go-flags/mode"
5+
gologgerstatus "github.com/ralvarezdev/go-logger/status"
6+
)
7+
8+
var (
9+
// LogModeMap is the map of the log mode
10+
LogModeMap = map[goflagsmode.Mode]map[gologgerstatus.Status]bool{
11+
goflagsmode.Debug: {
12+
gologgerstatus.Info: true,
13+
gologgerstatus.Error: true,
14+
gologgerstatus.Warning: true,
15+
gologgerstatus.Debug: true,
16+
gologgerstatus.Critical: true,
17+
},
18+
goflagsmode.Dev: {
19+
gologgerstatus.Info: true,
20+
gologgerstatus.Error: true,
21+
gologgerstatus.Warning: true,
22+
gologgerstatus.Debug: false,
23+
gologgerstatus.Critical: true,
24+
},
25+
goflagsmode.Prod: {
26+
gologgerstatus.Info: true,
27+
gologgerstatus.Error: true,
28+
gologgerstatus.Warning: true,
29+
gologgerstatus.Debug: false,
30+
gologgerstatus.Critical: true,
31+
},
32+
}
33+
)

mode/logger.go

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package mode
2+
3+
import (
4+
goflagsmode "github.com/ralvarezdev/go-flags/mode"
5+
gologger "github.com/ralvarezdev/go-logger"
6+
gologgerstatus "github.com/ralvarezdev/go-logger/status"
7+
)
8+
9+
type (
10+
// Logger interface for the mode logger
11+
Logger interface {
12+
ShouldLog(status gologgerstatus.Status) bool
13+
RunIfShouldLog(status gologgerstatus.Status, fn func())
14+
gologger.Logger
15+
}
16+
17+
// DefaultLogger is the default mode logger
18+
DefaultLogger struct {
19+
logger gologger.Logger
20+
}
21+
)
22+
23+
// NewDefaultLogger creates a new default mode logger
24+
func NewDefaultLogger(logger gologger.Logger) (
25+
*DefaultLogger,
26+
error,
27+
) {
28+
// Check if the logger is nil
29+
if logger == nil {
30+
return nil, gologger.ErrNilLogger
31+
}
32+
33+
return &DefaultLogger{logger: logger}, nil
34+
}
35+
36+
// Log logs a message
37+
func (d *DefaultLogger) Log(message *gologger.Message) {
38+
// Check if the message is nil
39+
if message == nil {
40+
return
41+
}
42+
43+
d.RunIfShouldLog(
44+
message.Status(), func() {
45+
d.logger.Log(message)
46+
},
47+
)
48+
}
49+
50+
// ShouldLog checks if the log should be logged
51+
func (d *DefaultLogger) ShouldLog(status gologgerstatus.Status) bool {
52+
return LogModeMap[goflagsmode.ModeFlag.Mode()][status]
53+
}
54+
55+
// RunIfShouldLog runs the function if the log should be logged
56+
func (d *DefaultLogger) RunIfShouldLog(
57+
status gologgerstatus.Status,
58+
fn func(),
59+
) {
60+
if d.ShouldLog(status) {
61+
fn()
62+
}
63+
}
64+
65+
// Info logs an info message
66+
func (d *DefaultLogger) Info(header, subheader string, details *[]string) {
67+
d.RunIfShouldLog(
68+
gologgerstatus.Info, func() {
69+
d.logger.Info(
70+
header,
71+
subheader,
72+
details,
73+
)
74+
},
75+
)
76+
}
77+
78+
// Error logs an error message
79+
func (d *DefaultLogger) Error(header, subheader string, errors *[]error) {
80+
d.RunIfShouldLog(
81+
gologgerstatus.Error, func() {
82+
d.logger.Error(
83+
header,
84+
subheader,
85+
errors,
86+
)
87+
},
88+
)
89+
}
90+
91+
// Debug logs a debug message
92+
func (d *DefaultLogger) Debug(header, subheader string, details *[]string) {
93+
d.RunIfShouldLog(
94+
gologgerstatus.Debug, func() {
95+
d.logger.Debug(
96+
header,
97+
subheader,
98+
details,
99+
)
100+
},
101+
)
102+
}
103+
104+
// Critical logs a critical message
105+
func (d *DefaultLogger) Critical(header, subheader string, details *[]string) {
106+
d.RunIfShouldLog(
107+
gologgerstatus.Critical, func() {
108+
d.logger.Critical(
109+
header,
110+
subheader,
111+
details,
112+
)
113+
},
114+
)
115+
}
116+
117+
// Warning logs a warning message
118+
func (d *DefaultLogger) Warning(header, subheader string, details *[]string) {
119+
d.RunIfShouldLog(
120+
gologgerstatus.Warning, func() {
121+
d.logger.Warning(
122+
header,
123+
subheader,
124+
details,
125+
)
126+
},
127+
)
128+
}

mode/named/logger.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package named
2+
3+
import (
4+
gologger "github.com/ralvarezdev/go-logger"
5+
gologgermode "github.com/ralvarezdev/go-logger/mode"
6+
)
7+
8+
type (
9+
// Logger interface for the mode logger
10+
Logger interface {
11+
Info(subheader string, details ...string)
12+
Error(subheader string, errors ...error)
13+
Debug(subheader string, details ...string)
14+
Critical(subheader string, details ...string)
15+
Warning(subheader string, details ...string)
16+
}
17+
18+
// DefaultLogger is the default mode logger
19+
DefaultLogger struct {
20+
header string
21+
logger gologgermode.Logger
22+
}
23+
)
24+
25+
// NewDefaultLogger creates a new default mode logger
26+
func NewDefaultLogger(header string, logger gologgermode.Logger) (
27+
*DefaultLogger,
28+
error,
29+
) {
30+
// Check if the logger is nil
31+
if logger == nil {
32+
return nil, gologger.ErrNilLogger
33+
}
34+
35+
return &DefaultLogger{header: header, logger: logger}, nil
36+
}
37+
38+
// Info logs an info message
39+
func (d *DefaultLogger) Info(subheader string, details ...string) {
40+
d.logger.Info(d.header, subheader, &details)
41+
}
42+
43+
// Error logs an error message
44+
func (d *DefaultLogger) Error(subheader string, errors ...error) {
45+
d.logger.Error(d.header, subheader, &errors)
46+
}
47+
48+
// Debug logs a debug message
49+
func (d *DefaultLogger) Debug(subheader string, details ...string) {
50+
d.logger.Debug(d.header, subheader, &details)
51+
}
52+
53+
// Critical logs a critical message
54+
func (d *DefaultLogger) Critical(subheader string, details ...string) {
55+
d.logger.Critical(d.header, subheader, &details)
56+
}
57+
58+
// Warning logs a warning message
59+
func (d *DefaultLogger) Warning(subheader string, details ...string) {
60+
d.logger.Warning(d.header, subheader, &details)
61+
}

0 commit comments

Comments
 (0)