logging.go 1.29 KB
Newer Older
Janos Guljas's avatar
Janos Guljas committed
1 2 3 4
// Copyright 2020 The Swarm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

5 6
// Package logging provides the logger interface abstraction
// and implementation for Bee. It uses logrus under the hood.
Janos Guljas's avatar
Janos Guljas committed
7 8 9 10 11 12 13 14
package logging

import (
	"io"

	"github.com/sirupsen/logrus"
)

Janos Guljas's avatar
Janos Guljas committed
15 16 17 18 19 20 21 22 23 24 25
type Logger interface {
	Tracef(format string, args ...interface{})
	Trace(args ...interface{})
	Debugf(format string, args ...interface{})
	Debug(args ...interface{})
	Infof(format string, args ...interface{})
	Info(args ...interface{})
	Warningf(format string, args ...interface{})
	Warning(args ...interface{})
	Errorf(format string, args ...interface{})
	Error(args ...interface{})
26 27
	WithField(key string, value interface{}) *logrus.Entry
	WithFields(fields logrus.Fields) *logrus.Entry
28
	WriterLevel(logrus.Level) *io.PipeWriter
29
	NewEntry() *logrus.Entry
Janos Guljas's avatar
Janos Guljas committed
30 31
}

32 33 34 35 36 37
type logger struct {
	*logrus.Logger
	metrics metrics
}

func New(w io.Writer, level logrus.Level) Logger {
Janos Guljas's avatar
Janos Guljas committed
38 39
	l := logrus.New()
	l.SetOutput(w)
40
	l.SetLevel(level)
Janos Guljas's avatar
Janos Guljas committed
41
	l.Formatter = &logrus.TextFormatter{
Janos Guljas's avatar
Janos Guljas committed
42 43
		FullTimestamp: true,
	}
44 45 46 47 48 49
	metrics := newMetrics()
	l.AddHook(metrics)
	return &logger{
		Logger:  l,
		metrics: metrics,
	}
Janos Guljas's avatar
Janos Guljas committed
50
}
51 52 53 54

func (l *logger) NewEntry() *logrus.Entry {
	return logrus.NewEntry(l.Logger)
}