| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package plugin |
| |
| import hclog "github.com/hashicorp/go-hclog" |
| |
| type LoggerServer struct { |
| logger hclog.Logger |
| } |
| |
| func (l *LoggerServer) Trace(args *LoggerArgs, _ *struct{}) error { |
| l.logger.Trace(args.Msg, args.Args...) |
| return nil |
| } |
| |
| func (l *LoggerServer) Debug(args *LoggerArgs, _ *struct{}) error { |
| l.logger.Debug(args.Msg, args.Args...) |
| return nil |
| } |
| |
| func (l *LoggerServer) Info(args *LoggerArgs, _ *struct{}) error { |
| l.logger.Info(args.Msg, args.Args...) |
| return nil |
| } |
| |
| func (l *LoggerServer) Warn(args *LoggerArgs, reply *LoggerReply) error { |
| l.logger.Warn(args.Msg, args.Args...) |
| return nil |
| } |
| |
| func (l *LoggerServer) Error(args *LoggerArgs, reply *LoggerReply) error { |
| l.logger.Error(args.Msg, args.Args...) |
| return nil |
| } |
| |
| func (l *LoggerServer) Log(args *LoggerArgs, _ *struct{}) error { |
| switch translateLevel(args.Level) { |
| |
| case hclog.Trace: |
| l.logger.Trace(args.Msg, args.Args...) |
| |
| case hclog.Debug: |
| l.logger.Debug(args.Msg, args.Args...) |
| |
| case hclog.Info: |
| l.logger.Info(args.Msg, args.Args...) |
| |
| case hclog.Warn: |
| l.logger.Warn(args.Msg, args.Args...) |
| |
| case hclog.Error: |
| l.logger.Error(args.Msg, args.Args...) |
| |
| case hclog.NoLevel: |
| } |
| return nil |
| } |
| |
| func (l *LoggerServer) SetLevel(args int, _ *struct{}) error { |
| level := translateLevel(args) |
| l.logger = hclog.New(&hclog.LoggerOptions{Level: level}) |
| return nil |
| } |
| |
| func (l *LoggerServer) IsTrace(args interface{}, reply *LoggerReply) error { |
| result := l.logger.IsTrace() |
| *reply = LoggerReply{ |
| IsTrue: result, |
| } |
| return nil |
| } |
| |
| func (l *LoggerServer) IsDebug(args interface{}, reply *LoggerReply) error { |
| result := l.logger.IsDebug() |
| *reply = LoggerReply{ |
| IsTrue: result, |
| } |
| return nil |
| } |
| |
| func (l *LoggerServer) IsInfo(args interface{}, reply *LoggerReply) error { |
| result := l.logger.IsInfo() |
| *reply = LoggerReply{ |
| IsTrue: result, |
| } |
| return nil |
| } |
| |
| func (l *LoggerServer) IsWarn(args interface{}, reply *LoggerReply) error { |
| result := l.logger.IsWarn() |
| *reply = LoggerReply{ |
| IsTrue: result, |
| } |
| return nil |
| } |
| |
| type LoggerArgs struct { |
| Level int |
| Msg string |
| Args []interface{} |
| } |
| |
| // LoggerReply contains the RPC reply. Not all fields may be used |
| // for a particular RPC call. |
| type LoggerReply struct { |
| IsTrue bool |
| Error error |
| } |
| |
| func translateLevel(logxiLevel int) hclog.Level { |
| switch logxiLevel { |
| |
| case 1000, 10: |
| // logxi.LevelAll, logxi.LevelTrace: |
| return hclog.Trace |
| |
| case 7: |
| // logxi.LevelDebug: |
| return hclog.Debug |
| |
| case 6, 5: |
| // logxi.LevelInfo, logxi.LevelNotice: |
| return hclog.Info |
| |
| case 4: |
| // logxi.LevelWarn: |
| return hclog.Warn |
| |
| case 3, 2, 1, -1: |
| // logxi.LevelError, logxi.LevelFatal, logxi.LevelAlert, logxi.LevelEmergency: |
| return hclog.Error |
| } |
| return hclog.NoLevel |
| } |