-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgcp_logger.go
More file actions
102 lines (84 loc) · 2 KB
/
gcp_logger.go
File metadata and controls
102 lines (84 loc) · 2 KB
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
101
102
package log
import (
"context"
"encoding/json"
"fmt"
"time"
"cloud.google.com/go/logging"
"github.com/dairaga/config"
)
var (
cliClosed = false
cli *logging.Client
)
type gcplogger struct {
*logging.Logger
}
type entry struct {
File string `json:"file"`
Line int `json:"line"`
Message interface{} `json:"message"`
}
// ----------------------------------------------------------------------------
func initGCPLogger() {
var err error
project := config.GetString("log.gcp.project")
name := config.GetString("log.gcp.name")
if project == "" || name == "" {
return
}
cli, err = logging.NewClient(context.Background(), project)
if err != nil {
fmt.Printf("connect to gcp stackdriver logging: %v\n", err)
return
}
Register(&gcplogger{cli.Logger(name)})
}
// ----------------------------------------------------------------------------------------------------------------
func (l *gcplogger) Output(now time.Time, severity Severity, file string, lineNo int, message string) {
l.Log(
logging.Entry{
Timestamp: now,
Severity: logging.Severity(severity),
Payload: entry{
File: file,
Line: lineNo,
Message: message,
},
},
)
}
func (l *gcplogger) OutputJSON(now time.Time, severity Severity, file string, lineNo int, message json.RawMessage) {
l.Log(
logging.Entry{
Timestamp: now,
Severity: logging.Severity(severity),
Payload: entry{
File: file,
Line: lineNo,
Message: message,
},
},
)
}
func (l *gcplogger) OutputStruct(now time.Time, severity Severity, file string, lineNo int, message interface{}) {
l.Log(
logging.Entry{
Timestamp: now,
Severity: logging.Severity(severity),
Payload: entry{
File: file,
Line: lineNo,
Message: message,
},
},
)
}
// ----------------------------------------------------------------------------------------------------------------
func (l *gcplogger) Close() error {
if !cliClosed {
cliClosed = true
return cli.Close()
}
return nil
}