-
Notifications
You must be signed in to change notification settings - Fork 8
/
logr_logger.go
100 lines (84 loc) · 2.56 KB
/
logr_logger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
* Copyright (C) 2020-2022 Arm Limited or its affiliates and Contributors. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
package logs
import (
"context"
"fmt"
"github.com/go-logr/logr"
"github.com/go-logr/stdr"
"github.com/ARM-software/golang-utils/utils/commonerrors"
"github.com/ARM-software/golang-utils/utils/reflection"
)
const (
KeyLogSource = "source"
KeyLoggerSource = "logger-source"
)
type logrLogger struct {
logger logr.Logger
closeFunc func() error
}
func (l *logrLogger) Close() error {
if l.closeFunc != nil {
return l.closeFunc()
}
return nil
}
func (l *logrLogger) Check() error {
return nil
}
func (l *logrLogger) SetLogSource(source string) error {
if reflection.IsEmpty(source) {
return commonerrors.ErrNoLogSource
}
l.logger = l.logger.WithValues(KeyLogSource, source)
return nil
}
func (l *logrLogger) SetLoggerSource(source string) error {
if reflection.IsEmpty(source) {
return commonerrors.ErrNoLoggerSource
}
l.logger = l.logger.WithName(source).WithValues(KeyLoggerSource, source)
return nil
}
func (l *logrLogger) Log(output ...interface{}) {
l.logger.Info(fmt.Sprintln(output...))
}
func (l *logrLogger) LogError(err ...interface{}) {
if len(err) > 0 {
if subErr, ok := err[0].(error); ok {
l.logger.Error(subErr, fmt.Sprintln(err...))
} else {
l.logger.Error(nil, fmt.Sprintln(err...))
}
} else {
l.logger.Error(nil, "")
}
}
// NewLogrLogger creates loggers based on a logr implementation (https://github.com/go-logr/logr)
func NewLogrLogger(logrImpl logr.Logger, loggerSource string) (Loggers, error) {
return NewLogrLoggerWithClose(logrImpl, loggerSource, nil)
}
// NewLogrLoggerWithClose creates loggers based on a logr implementation (https://github.com/go-logr/logr)
func NewLogrLoggerWithClose(logrImpl logr.Logger, loggerSource string, closeFunc func() error) (loggers Loggers, err error) {
loggers = &logrLogger{logger: logrImpl, closeFunc: closeFunc}
err = loggers.SetLoggerSource(loggerSource)
return
}
// NewLogrLoggerFromLoggers converts loggers into a logr.Logger
func NewLogrLoggerFromLoggers(loggers Loggers) logr.Logger {
return stdr.New(newGolangStdLoggerFromLoggers(loggers))
}
// GetLogrLoggerFromContext gets a logger from a context, unless it does not exist then it returns an ErrNoLogger
func GetLogrLoggerFromContext(ctx context.Context) (logger logr.Logger, err error) {
logger, err = logr.FromContext(ctx)
if err != nil {
err = fmt.Errorf("%w: %v", commonerrors.ErrNoLogger, err.Error())
return
}
if logger.IsZero() {
err = commonerrors.ErrNoLogger
}
return
}