github.com/hashicorp/vault/sdk@v0.13.0/plugin/logger.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package plugin
     5  
     6  import hclog "github.com/hashicorp/go-hclog"
     7  
     8  type LoggerServer struct {
     9  	logger hclog.Logger
    10  }
    11  
    12  func (l *LoggerServer) Trace(args *LoggerArgs, _ *struct{}) error {
    13  	l.logger.Trace(args.Msg, args.Args...)
    14  	return nil
    15  }
    16  
    17  func (l *LoggerServer) Debug(args *LoggerArgs, _ *struct{}) error {
    18  	l.logger.Debug(args.Msg, args.Args...)
    19  	return nil
    20  }
    21  
    22  func (l *LoggerServer) Info(args *LoggerArgs, _ *struct{}) error {
    23  	l.logger.Info(args.Msg, args.Args...)
    24  	return nil
    25  }
    26  
    27  func (l *LoggerServer) Warn(args *LoggerArgs, reply *LoggerReply) error {
    28  	l.logger.Warn(args.Msg, args.Args...)
    29  	return nil
    30  }
    31  
    32  func (l *LoggerServer) Error(args *LoggerArgs, reply *LoggerReply) error {
    33  	l.logger.Error(args.Msg, args.Args...)
    34  	return nil
    35  }
    36  
    37  func (l *LoggerServer) Log(args *LoggerArgs, _ *struct{}) error {
    38  	switch translateLevel(args.Level) {
    39  
    40  	case hclog.Trace:
    41  		l.logger.Trace(args.Msg, args.Args...)
    42  
    43  	case hclog.Debug:
    44  		l.logger.Debug(args.Msg, args.Args...)
    45  
    46  	case hclog.Info:
    47  		l.logger.Info(args.Msg, args.Args...)
    48  
    49  	case hclog.Warn:
    50  		l.logger.Warn(args.Msg, args.Args...)
    51  
    52  	case hclog.Error:
    53  		l.logger.Error(args.Msg, args.Args...)
    54  
    55  	case hclog.NoLevel:
    56  	}
    57  	return nil
    58  }
    59  
    60  func (l *LoggerServer) SetLevel(args int, _ *struct{}) error {
    61  	level := translateLevel(args)
    62  	l.logger = hclog.New(&hclog.LoggerOptions{Level: level})
    63  	return nil
    64  }
    65  
    66  func (l *LoggerServer) IsTrace(args interface{}, reply *LoggerReply) error {
    67  	result := l.logger.IsTrace()
    68  	*reply = LoggerReply{
    69  		IsTrue: result,
    70  	}
    71  	return nil
    72  }
    73  
    74  func (l *LoggerServer) IsDebug(args interface{}, reply *LoggerReply) error {
    75  	result := l.logger.IsDebug()
    76  	*reply = LoggerReply{
    77  		IsTrue: result,
    78  	}
    79  	return nil
    80  }
    81  
    82  func (l *LoggerServer) IsInfo(args interface{}, reply *LoggerReply) error {
    83  	result := l.logger.IsInfo()
    84  	*reply = LoggerReply{
    85  		IsTrue: result,
    86  	}
    87  	return nil
    88  }
    89  
    90  func (l *LoggerServer) IsWarn(args interface{}, reply *LoggerReply) error {
    91  	result := l.logger.IsWarn()
    92  	*reply = LoggerReply{
    93  		IsTrue: result,
    94  	}
    95  	return nil
    96  }
    97  
    98  type LoggerArgs struct {
    99  	Level int
   100  	Msg   string
   101  	Args  []interface{}
   102  }
   103  
   104  // LoggerReply contains the RPC reply. Not all fields may be used
   105  // for a particular RPC call.
   106  type LoggerReply struct {
   107  	IsTrue bool
   108  	Error  error
   109  }
   110  
   111  func translateLevel(logxiLevel int) hclog.Level {
   112  	switch logxiLevel {
   113  
   114  	case 1000, 10:
   115  		// logxi.LevelAll, logxi.LevelTrace:
   116  		return hclog.Trace
   117  
   118  	case 7:
   119  		// logxi.LevelDebug:
   120  		return hclog.Debug
   121  
   122  	case 6, 5:
   123  		// logxi.LevelInfo, logxi.LevelNotice:
   124  		return hclog.Info
   125  
   126  	case 4:
   127  		// logxi.LevelWarn:
   128  		return hclog.Warn
   129  
   130  	case 3, 2, 1, -1:
   131  		// logxi.LevelError, logxi.LevelFatal, logxi.LevelAlert, logxi.LevelEmergency:
   132  		return hclog.Error
   133  	}
   134  	return hclog.NoLevel
   135  }