blob: 852f52cda18ae51ca1deb28c5c9293256296dbc7 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package vlog
import (
// TODO(cnicolaou): remove this dependency in the future. For now this
// saves us some code.
"github.com/cosmosnicolaou/llog"
)
type InfoLog interface {
// Info logs to the INFO log.
// Arguments are handled in the manner of fmt.Print; a newline is appended if missing.
Info(args ...interface{})
// Infoln logs to the INFO log.
// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing.
Infof(format string, args ...interface{})
// InfoStack logs the current goroutine's stack if the all parameter
// is false, or the stacks of all goroutines if it's true.
InfoStack(all bool)
}
type Verbosity interface {
// V returns true if the configured logging level is greater than or equal to its parameter
V(level Level) bool
// VI is like V, except that it returns an instance of the Info
// interface that will either log (if level >= the configured level)
// or discard its parameters. This allows for logger.VI(2).Info
// style usage.
VI(level Level) InfoLog
}
// Level specifies a level of verbosity for V logs.
// It can be set via the Level optional parameter to Configure.
// It implements the flag.Value interface to support command line option parsing.
type Level llog.Level
// Set is part of the flag.Value interface.
func (l *Level) Set(v string) error {
return (*llog.Level)(l).Set(v)
}
// Get is part of the flag.Value interface.
func (l *Level) Get(v string) interface{} {
return *l
}
// String is part of the flag.Value interface.
func (l *Level) String() string {
return (*llog.Level)(l).String()
}
// StderrThreshold identifies the sort of log: info, warning etc.
// The values match the corresponding constants in C++ - e.g WARNING etc.
// It can be set via the StderrThreshold optional parameter to Configure.
// It implements the flag.Value interface to support command line option parsing.
type StderrThreshold llog.Severity
// Set is part of the flag.Value interface.
func (s *StderrThreshold) Set(v string) error {
return (*llog.Severity)(s).Set(v)
}
// Get is part of the flag.Value interface.
func (s *StderrThreshold) Get(v string) interface{} {
return *s
}
// String is part of the flag.Value interface.
func (s *StderrThreshold) String() string {
return (*llog.Severity)(s).String()
}
// ModuleSpec allows for the setting of specific log levels for specific
// modules. The syntax is recordio=2,file=1,gfs*=3
// It can be set via the ModuleSpec optional parameter to Configure.
// It implements the flag.Value interface to support command line option parsing.
type ModuleSpec struct {
llog.ModuleSpec
}
// TraceLocation specifies the location, file:N, which when encountered will
// cause logging to emit a stack trace.
// It can be set via the TraceLocation optional parameter to Configure.
// It implements the flag.Value interface to support command line option parsing.
type TraceLocation struct {
llog.TraceLocation
}
// LevelStats tracks the number of lines of output and number of bytes
// per severity level.
type LevelStats llog.Stats
type Logger interface {
InfoLog
Verbosity
// Flush flushes all pending log I/O.
FlushLog()
// Error logs to the ERROR and INFO logs.
// Arguments are handled in the manner of fmt.Print; a newline is appended if missing.
Error(args ...interface{})
// Errorf logs to the ERROR and INFO logs.
// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing.
Errorf(format string, args ...interface{})
// Fatal logs to the FATAL, ERROR and INFO logs,
// including a stack trace of all running goroutines, then calls os.Exit(255).
// Arguments are handled in the manner of fmt.Print; a newline is appended if missing.
Fatal(args ...interface{})
// Fatalf logs to the FATAL, ERROR and INFO logs,
// including a stack trace of all running goroutines, then calls os.Exit(255).
// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing.
Fatalf(format string, args ...interface{})
// Panic is equivalent to Error() followed by a call to panic().
Panic(args ...interface{})
// Panicf is equivalent to Errorf() followed by a call to panic().
Panicf(format string, args ...interface{})
// Configure configures all future logging. Some options
// may not be usable if Configure is called from an init function,
// in which case an error will be returned. The Configured error is
// returned if ConfigureLogger has already been called unless the
// OverridePriorConfiguration options is included.
// Some options only take effect if they are set before the logger
// is used. Once anything is logged using the logger, these options
// will silently be ignored. For example, LogDir, LogToStderr or
// AlsoLogToStderr fall in this category.
Configure(opts ...LoggingOpts) error
// Stats returns stats on how many lines/bytes haven been written to
// this set of logs per severity level.
Stats() LevelStats
// LogDir returns the currently configured directory for storing logs.
LogDir() string
}
// Runtime defines the methods that the runtime must implement.
type Runtime interface {
// Logger returns the current logger, if any, in use by the Runtime.
// TODO(cnicolaou): remove this.
Logger() Logger
// NewLogger creates a new instance of the logging interface that is
// separate from the one provided by Runtime.
NewLogger(name string, opts ...LoggingOpts) (Logger, error)
}