1// Copyright (c) 2017 Uber Technologies, Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package xkit
16
17import (
18	"fmt"
19
20	"github.com/go-kit/kit/log"
21	"github.com/go-kit/kit/log/level"
22)
23
24// LoggerOption sets a parameter for the Logger.
25type LoggerOption func(*Logger)
26
27// MessageKey sets the key for the actual log message. By default, it's "msg".
28func MessageKey(key string) LoggerOption {
29	return func(l *Logger) { l.messageKey = key }
30}
31
32// Logger wraps a go-kit logger instance in a Jaeger client compatible one.
33type Logger struct {
34	infoLogger  log.Logger
35	errorLogger log.Logger
36
37	messageKey string
38}
39
40// NewLogger creates a new Jaeger client logger from a go-kit one.
41func NewLogger(kitlogger log.Logger, options ...LoggerOption) *Logger {
42	logger := &Logger{
43		infoLogger:  level.Info(kitlogger),
44		errorLogger: level.Error(kitlogger),
45
46		messageKey: "msg",
47	}
48
49	for _, option := range options {
50		option(logger)
51	}
52
53	return logger
54}
55
56// Error implements the github.com/uber/jaeger-client-go/log.Logger interface.
57func (l *Logger) Error(msg string) {
58	l.errorLogger.Log(l.messageKey, msg)
59}
60
61// Infof implements the github.com/uber/jaeger-client-go/log.Logger interface.
62func (l *Logger) Infof(msg string, args ...interface{}) {
63	l.infoLogger.Log(l.messageKey, fmt.Sprintf(msg, args...))
64}
65