component.go

  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}