• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

oxyno-zeta / s3-proxy / 14319556830

07 Apr 2025 09:10PM UTC coverage: 86.151% (-0.01%) from 86.162%
14319556830

push

github

oxyno-zeta
chore(deps): update golangci/golangci-lint-action action to v7

5412 of 6282 relevant lines covered (86.15%)

46.58 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.09
/pkg/s3-proxy/log/instance.go
1
package log
2

3
import (
4
        "fmt"
5
        "os"
6
        "path/filepath"
7
        "strings"
8

9
        "emperror.dev/errors"
10
        logrus "github.com/sirupsen/logrus"
11
)
12

13
const (
14
        LogFileMode     = 0o666
15
        LogTraceIDField = "trace_id"
16
)
17

18
type loggerIns struct {
19
        logrus.FieldLogger
20
}
21

22
// This is dirty pkg/errors.
23
type stackTracer interface {
24
        StackTrace() errors.StackTrace
25
}
26

27
func (ll *loggerIns) GetTracingLogger() TracingLogger {
141✔
28
        return &tracingLogger{
141✔
29
                logger: ll,
141✔
30
        }
141✔
31
}
141✔
32

33
func (ll *loggerIns) GetCorsLogger() CorsLogger {
6✔
34
        return &corsLogger{
6✔
35
                logger: ll,
6✔
36
        }
6✔
37
}
6✔
38

39
func (ll *loggerIns) Configure(level string, format string, filePath string) error {
95✔
40
        // Parse log level
95✔
41
        lvl, err := logrus.ParseLevel(level)
95✔
42
        // Check error
95✔
43
        if err != nil {
96✔
44
                return errors.WithStack(err)
1✔
45
        }
1✔
46

47
        // Get logrus logger
48
        lll, _ := ll.FieldLogger.(*logrus.Logger)
94✔
49

94✔
50
        // Set log level
94✔
51
        lll.SetLevel(lvl)
94✔
52

94✔
53
        // Set format
94✔
54
        if format == "json" {
96✔
55
                lll.SetFormatter(&logrus.JSONFormatter{})
2✔
56
        } else {
94✔
57
                lll.SetFormatter(&logrus.TextFormatter{})
92✔
58
        }
92✔
59

60
        if filePath != "" {
95✔
61
                // Create directory if necessary
1✔
62
                err2 := os.MkdirAll(filepath.Dir(filePath), os.ModePerm)
1✔
63
                // Check error
1✔
64
                if err2 != nil {
1✔
65
                        return errors.WithStack(err2)
×
66
                }
×
67

68
                // Open file
69
                f, err := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND|os.O_CREATE, LogFileMode)
1✔
70
                // Check error
1✔
71
                if err != nil {
1✔
72
                        return errors.WithStack(err)
×
73
                }
×
74

75
                // Set output file
76
                lll.SetOutput(f)
1✔
77
        }
78

79
        return nil
94✔
80
}
81

82
func (ll *loggerIns) WithField(key string, value interface{}) Logger {
32✔
83
        // Create new field logger
32✔
84
        fieldL := ll.FieldLogger.WithField(key, value)
32✔
85

32✔
86
        return &loggerIns{
32✔
87
                FieldLogger: fieldL,
32✔
88
        }
32✔
89
}
32✔
90

91
func (ll *loggerIns) WithFields(fields map[string]interface{}) Logger {
389✔
92
        // Transform fields
389✔
93
        var ff logrus.Fields = fields
389✔
94
        // Create new field logger
389✔
95
        fieldL := ll.FieldLogger.WithFields(ff)
389✔
96

389✔
97
        return &loggerIns{
389✔
98
                FieldLogger: fieldL,
389✔
99
        }
389✔
100
}
389✔
101

102
func (ll *loggerIns) WithError(err error) Logger {
×
103
        // Create new field logger with error
×
104
        fieldL := ll.addPotentialWithError(err)
×
105
        // Return new logger
×
106
        return &loggerIns{
×
107
                FieldLogger: fieldL,
×
108
        }
×
109
}
×
110

111
func (ll *loggerIns) addPotentialWithError(elem interface{}) logrus.FieldLogger {
211✔
112
        // Try to cast element to error
211✔
113
        err, ok := elem.(error)
211✔
114
        // Check if can be casted to error
211✔
115
        if ok {
365✔
116
                // Create new field logger
154✔
117
                fieldL := ll.FieldLogger.WithError(err)
154✔
118

154✔
119
                addStackTrace := func(pError stackTracer) {
268✔
120
                        // Get stack trace from error
114✔
121
                        st := pError.StackTrace()
114✔
122
                        // Stringify stack trace
114✔
123
                        valued := fmt.Sprintf("%+v", st)
114✔
124
                        // Remove all tabs
114✔
125
                        valued = strings.ReplaceAll(valued, "\t", "")
114✔
126
                        // Split on new line
114✔
127
                        stack := strings.Split(valued, "\n")
114✔
128
                        // Remove first empty string
114✔
129
                        stack = stack[1:]
114✔
130
                        // Add stack trace to field logger
114✔
131
                        fieldL = fieldL.WithField("stack", strings.Join(stack, ","))
114✔
132
                }
114✔
133

134
                // Check if error as an hidden stackTracer
135
                var st stackTracer
154✔
136
                if errors.As(err, &st) {
268✔
137
                        addStackTrace(st)
114✔
138
                }
114✔
139

140
                return fieldL
154✔
141
        }
142

143
        // Default
144
        return ll.FieldLogger
57✔
145
}
146

147
func (ll *loggerIns) Error(args ...interface{}) {
157✔
148
        // Add potential "WithError"
157✔
149
        l := ll.addPotentialWithError(args[0])
157✔
150

157✔
151
        // Call logger error method
157✔
152
        l.Error(args...)
157✔
153
}
157✔
154

155
func (ll *loggerIns) Fatal(args ...interface{}) {
×
156
        // Add potential "WithError"
×
157
        l := ll.addPotentialWithError(args[0])
×
158

×
159
        // Call logger fatal method
×
160
        l.Fatal(args...)
×
161
}
×
162

163
func (ll *loggerIns) Errorf(format string, args ...interface{}) {
38✔
164
        // Create error
38✔
165
        err := fmt.Errorf(format, args...)
38✔
166

38✔
167
        // Log error
38✔
168
        ll.Error(err)
38✔
169
}
38✔
170

171
func (ll *loggerIns) Fatalf(format string, args ...interface{}) {
×
172
        // Create error
×
173
        err := fmt.Errorf(format, args...)
×
174

×
175
        // Log fatal
×
176
        ll.Fatal(err)
×
177
}
×
178

179
func (ll *loggerIns) Errorln(args ...interface{}) {
54✔
180
        // Add potential "WithError"
54✔
181
        l := ll.addPotentialWithError(args[0])
54✔
182

54✔
183
        // Log error
54✔
184
        l.Errorln(args...)
54✔
185
}
54✔
186

187
func (ll *loggerIns) Fatalln(args ...interface{}) {
×
188
        // Add potential "WithError"
×
189
        l := ll.addPotentialWithError(args[0])
×
190

×
191
        // Log fatal
×
192
        l.Fatalln(args...)
×
193
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc