1/*
2 *
3 * Copyright 2020 gRPC authors.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 */
18
19package grpclog
20
21import (
22 "fmt"
23)
24
25// componentData records the settings for a component.
26type componentData struct {
27 name string
28}
29
30var cache = map[string]*componentData{}
31
32func (c *componentData) InfoDepth(depth int, args ...any) {
33 args = append([]any{"[" + string(c.name) + "]"}, args...)
34 InfoDepth(depth+1, args...)
35}
36
37func (c *componentData) WarningDepth(depth int, args ...any) {
38 args = append([]any{"[" + string(c.name) + "]"}, args...)
39 WarningDepth(depth+1, args...)
40}
41
42func (c *componentData) ErrorDepth(depth int, args ...any) {
43 args = append([]any{"[" + string(c.name) + "]"}, args...)
44 ErrorDepth(depth+1, args...)
45}
46
47func (c *componentData) FatalDepth(depth int, args ...any) {
48 args = append([]any{"[" + string(c.name) + "]"}, args...)
49 FatalDepth(depth+1, args...)
50}
51
52func (c *componentData) Info(args ...any) {
53 c.InfoDepth(1, args...)
54}
55
56func (c *componentData) Warning(args ...any) {
57 c.WarningDepth(1, args...)
58}
59
60func (c *componentData) Error(args ...any) {
61 c.ErrorDepth(1, args...)
62}
63
64func (c *componentData) Fatal(args ...any) {
65 c.FatalDepth(1, args...)
66}
67
68func (c *componentData) Infof(format string, args ...any) {
69 c.InfoDepth(1, fmt.Sprintf(format, args...))
70}
71
72func (c *componentData) Warningf(format string, args ...any) {
73 c.WarningDepth(1, fmt.Sprintf(format, args...))
74}
75
76func (c *componentData) Errorf(format string, args ...any) {
77 c.ErrorDepth(1, fmt.Sprintf(format, args...))
78}
79
80func (c *componentData) Fatalf(format string, args ...any) {
81 c.FatalDepth(1, fmt.Sprintf(format, args...))
82}
83
84func (c *componentData) Infoln(args ...any) {
85 c.InfoDepth(1, args...)
86}
87
88func (c *componentData) Warningln(args ...any) {
89 c.WarningDepth(1, args...)
90}
91
92func (c *componentData) Errorln(args ...any) {
93 c.ErrorDepth(1, args...)
94}
95
96func (c *componentData) Fatalln(args ...any) {
97 c.FatalDepth(1, args...)
98}
99
100func (c *componentData) V(l int) bool {
101 return V(l)
102}
103
104// Component creates a new component and returns it for logging. If a component
105// with the name already exists, nothing will be created and it will be
106// returned. SetLoggerV2 will panic if it is called with a logger created by
107// Component.
108func Component(componentName string) DepthLoggerV2 {
109 if cData, ok := cache[componentName]; ok {
110 return cData
111 }
112 c := &componentData{componentName}
113 cache[componentName] = c
114 return c
115}