log

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2023 License: Apache-2.0 Imports: 7 Imported by: 54

README

codecov

Log

Fortio's log is simple logger built on top of go's default one with additional opinionated levels similar to glog but simpler to use and configure.

It's been used for many years for Fortio's org Fortio project and more (under fortio.org/fortio/log package) but split out recently for standalone use, with the "flag polution" limited (as a library it doesn't include the flags, you configure it using apis).

log.Debugf() // Debug level
log.LogVf()  // Verbose level
log.Infof()  // Info/default level
log.Warnf()  // Warning level
log.Errf()   // Error level
log.Critf()  // Critical level (always logged even if level is set to max)
log.Fatalf() // Fatal level - program will panic/exit

See the Config object for options like whether to include line number and file name of caller or not etc

Documentation

Overview

Fortio's log is simple logger built on top of go's default one with additional opinionated levels similar to glog but simpler to use and configure. ``` log.Debugf() // Debug level log.LogVf() // Verbose level log.Infof() // Info/default level log.Warnf() // Warning level log.Errf() // Error level log.Critf() // Critical level (always logged even if level is set to max) log.Fatalf() // Fatal level - program will panic/exit ``` See Config object for options like whether to include line number and file name of caller or not etc

Index

Constants

This section is empty.

Variables

View Source
var (
	Config = DefaultConfig()
	// Used for dynamic flag setting as strings and validation.
	LevelToStrA []string
)

Functions

func Critf

func Critf(format string, rest ...interface{})

Critf logs if Warning level is on.

func Debugf

func Debugf(format string, rest ...interface{})

Debugf logs if Debug level is on.

func Errf

func Errf(format string, rest ...interface{})

Errf logs if Warning level is on.

func FErrf

func FErrf(format string, rest ...interface{}) int

FErrF logs a fatal error and returns 1. meant for cli main functions written like: func main() { os.Exit(Main()) } and if err != nil { return log.FErrf("error: %v", err) } so they can be tested with testscript. See https://github.com/fortio/delta/ for example.

func Fatalf

func Fatalf(format string, rest ...interface{})

Fatalf logs if Warning level is on and panics or exits.

func Infof

func Infof(format string, rest ...interface{})

Infof logs if Info level is on.

func Log

func Log(lvl Level) bool

Log returns true if a given level is currently logged.

func LogDebug

func LogDebug() bool

LogDebug shortcut for fortio.Log(fortio.Debug).

func LogVerbose

func LogVerbose() bool

LogVerbose shortcut for fortio.Log(fortio.Verbose).

func LogVf

func LogVf(format string, rest ...interface{})

LogVf logs if Verbose level is on.

func Logf

func Logf(lvl Level, format string, rest ...interface{})

Logf logs with format at the given level. 2 level of calls so it's always same depth for extracting caller file/line. Note that log.Logf(Fatal, "...") will not panic or exit, only log.Fatalf() does.

func Printf

func Printf(format string, rest ...interface{})

Printf forwards to the underlying go logger to print (with only timestamp prefixing).

func SetDefaultsForClientTools

func SetDefaultsForClientTools()

SetDefaultsForClientTools changes the default value of LogPrefix and LogFileAndLine to make output without caller and prefix, a default more suitable for command line tools (like dnsping). Needs to be called before flag.Parse(). Caller could also use log.Printf instead of changing this if not wanting to use levels. Also makes log.Fatalf just exit instead of panic.

func SetFlags

func SetFlags(f int)

SetFlags forwards flags to the system logger.

func SetLogLevelStr

func SetLogLevelStr(str string) error

Sets level from string (called by dflags).

_ = dflag.DynString(flag.CommandLine, "loglevel", GetLogLevel().String(),
        fmt.Sprintf("loglevel, one of %v", LevelToStrA)).WithInputMutator(
        func(inp string) string {
                // The validation map has full lowercase and capitalized first letter version
                return strings.ToLower(strings.TrimSpace(inp))
        }).WithValidator(
        func(newStr string) error {
                _, err := ValidateLevel(newStr)
                return err
        }).WithSyncNotifier(
        func(old, newStr string) {
                _ = SetLogLevelStr(newStr) // will succeed as we just validated it first
        })

func SetOutput

func SetOutput(w io.Writer)

SetOutput sets the output to a different writer (forwards to system logger).

func Warnf

func Warnf(format string, rest ...interface{})

Warnf logs if Warning level is on.

Types

type Level

type Level int32

Level is the level of logging (0 Debug -> 6 Fatal).

const (
	Debug Level = iota
	Verbose
	Info
	Warning
	Error
	Critical
	Fatal
)

Log levels. Go can't have variable and function of the same name so we keep medium length (Dbg,Info,Warn,Err,Crit,Fatal) names for the functions.

func GetLogLevel

func GetLogLevel() Level

GetLogLevel returns the currently configured LogLevel.

func LevelByName

func LevelByName(str string) Level

LevelByName returns the LogLevel by its name.

func SetLogLevel

func SetLogLevel(lvl Level) Level

SetLogLevel sets the log level and returns the previous one.

func SetLogLevelQuiet

func SetLogLevelQuiet(lvl Level) Level

SetLogLevelQuiet sets the log level and returns the previous one but does not log the change of level itself.

func ValidateLevel

func ValidateLevel(str string) (Level, error)

ValidateLevel returns error if the level string is not valid.

func (Level) String

func (l Level) String() string

String returns the string representation of the level.

type LogConfig

type LogConfig struct {
	LogPrefix      string    // "Prefix to log lines before logged messages
	LogFileAndLine bool      // Logs filename and line number of callers to log.
	FatalPanics    bool      // If true, log.Fatalf will panic (stack trace) instead of just exit 1
	FatalExit      func(int) // Function to call upon log.Fatalf. e.g. os.Exit.
}

func DefaultConfig

func DefaultConfig() *LogConfig

type LoggerI

type LoggerI interface {
	Printf(format string, rest ...interface{})
}

LoggerI defines a log.Logger like interface for simple logging.

func Logger

func Logger() LoggerI

Logger returns a LoggerI (standard logger compatible) that can be used for simple logging.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL