blob: 1ef4694e9b8f4acefbca475df7ee926f4814e012 [file] [log] [blame]
// 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
}