123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- package golog
- import (
- "io"
- "time"
- "github.com/kataras/pio"
- )
- // Now is called to set the log's timestamp value.
- // It can be altered through initialization of the program
- // to customize the behavior of getting the current time.
- var Now func() time.Time = time.Now
- // NewLine can override the default package-level line breaker, "\n".
- // It should be called (in-sync) before the print or leveled functions.
- //
- // See `github.com/kataras/pio#NewLine` and `Logger#NewLine` too.
- func NewLine(newLineChar string) {
- pio.NewLine = []byte(newLineChar)
- }
- // Default is the package-level ready-to-use logger,
- // level had set to "info", is changeable.
- var Default = New()
- // Reset re-sets the default logger to an empty one.
- func Reset() {
- Default = New()
- }
- // SetOutput overrides the Default Logger's Printer's output with another `io.Writer`.
- func SetOutput(w io.Writer) {
- Default.SetOutput(w)
- }
- // AddOutput adds one or more `io.Writer` to the Default Logger's Printer.
- //
- // If one of the "writers" is not a terminal-based (i.e File)
- // then colors will be disabled for all outputs.
- func AddOutput(writers ...io.Writer) {
- Default.AddOutput(writers...)
- }
- // SetPrefix sets a prefix for the default package-level Logger.
- //
- // The prefix is the first space-separated
- // word that is being presented to the output.
- // It's written even before the log level text.
- //
- // Returns itself.
- func SetPrefix(s string) *Logger {
- return Default.SetPrefix(s)
- }
- // SetTimeFormat sets time format for logs,
- // if "s" is empty then time representation will be off.
- func SetTimeFormat(s string) *Logger {
- return Default.SetTimeFormat(s)
- }
- // SetStacktraceLimit sets a stacktrace entries limit
- // on `Debug` level.
- // Zero means all number of stack entries will be logged.
- // Negative value disables the stacktrace field.
- func SetStacktraceLimit(limit int) *Logger {
- return Default.SetStacktraceLimit(limit)
- }
- // RegisterFormatter registers a Formatter for this logger.
- func RegisterFormatter(f Formatter) *Logger {
- return Default.RegisterFormatter(f)
- }
- // SetFormat sets a default formatter for all log levels.
- func SetFormat(formatter string, opts ...interface{}) *Logger {
- return Default.SetFormat(formatter, opts...)
- }
- // SetLevelFormat changes the output format for the given "levelName".
- func SetLevelFormat(levelName string, formatter string, opts ...interface{}) *Logger {
- return Default.SetLevelFormat(levelName, formatter, opts...)
- }
- // SetLevelOutput sets a destination log output for the specific "levelName".
- // For multiple writers use the `io.Multiwriter` wrapper.
- func SetLevelOutput(levelName string, w io.Writer) *Logger {
- return Default.SetLevelOutput(levelName, w)
- }
- // GetLevelOutput returns the responsible writer for the given "levelName".
- // If not a registered writer is set for that level then it returns
- // the logger's default printer. It does NOT return nil.
- func GetLevelOutput(levelName string) io.Writer {
- return Default.GetLevelOutput(levelName)
- }
- // SetLevel accepts a string representation of
- // a `Level` and returns a `Level` value based on that "levelName".
- //
- // Available level names are:
- // "disable"
- // "fatal"
- // "error"
- // "warn"
- // "info"
- // "debug"
- //
- // Alternatively you can use the exported `Default.Level` field, i.e `Default.Level = golog.ErrorLevel`
- func SetLevel(levelName string) {
- Default.SetLevel(levelName)
- }
- // Print prints a log message without levels and colors.
- func Print(v ...interface{}) {
- Default.Print(v...)
- }
- // Println prints a log message without levels and colors.
- // It adds a new line at the end.
- func Println(v ...interface{}) {
- Default.Println(v...)
- }
- // Logf prints a leveled log message to the output.
- // This method can be used to use custom log levels if needed.
- // It adds a new line in the end.
- func Logf(level Level, format string, args ...interface{}) {
- Default.Logf(level, format, args...)
- }
- // Fatal `os.Exit(1)` exit no matter the level of the logger.
- // If the logger's level is fatal, error, warn, info or debug
- // then it will print the log message too.
- func Fatal(v ...interface{}) {
- Default.Fatal(v...)
- }
- // Fatalf will `os.Exit(1)` no matter the level of the logger.
- // If the logger's level is fatal, error, warn, info or debug
- // then it will print the log message too.
- func Fatalf(format string, args ...interface{}) {
- Default.Fatalf(format, args...)
- }
- // Error will print only when logger's Level is error, warn, info or debug.
- func Error(v ...interface{}) {
- Default.Error(v...)
- }
- // Errorf will print only when logger's Level is error, warn, info or debug.
- func Errorf(format string, args ...interface{}) {
- Default.Errorf(format, args...)
- }
- // Warn will print when logger's Level is warn, info or debug.
- func Warn(v ...interface{}) {
- Default.Warn(v...)
- }
- // Warnf will print when logger's Level is warn, info or debug.
- func Warnf(format string, args ...interface{}) {
- Default.Warnf(format, args...)
- }
- // Info will print when logger's Level is info or debug.
- func Info(v ...interface{}) {
- Default.Info(v...)
- }
- // Infof will print when logger's Level is info or debug.
- func Infof(format string, args ...interface{}) {
- Default.Infof(format, args...)
- }
- // Debug will print when logger's Level is debug.
- func Debug(v ...interface{}) {
- Default.Debug(v...)
- }
- // Debugf will print when logger's Level is debug.
- func Debugf(format string, args ...interface{}) {
- Default.Debugf(format, args...)
- }
- // Install receives an external logger
- // and automatically adapts its print functions.
- //
- // Install adds a golog handler to support third-party integrations,
- // it can be used only once per `golog#Logger` instance.
- //
- // For example, if you want to print using a logrus
- // logger you can do the following:
- //
- // Install(logrus.StandardLogger())
- //
- // Or the standard log's Logger:
- //
- // import "log"
- // myLogger := log.New(os.Stdout, "", 0)
- // Install(myLogger)
- //
- // Or even the slog/log's Logger:
- //
- // import "log/slog"
- // myLogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
- // Install(myLogger) OR Install(slog.Default())
- //
- // Look `golog#Logger.Handle` for more.
- func Install(logger any) {
- Default.Install(logger)
- }
- // Handle adds a log handler to the default logger.
- //
- // Handlers can be used to intercept the message between a log value
- // and the actual print operation, it's called
- // when one of the print functions called.
- // If it's return value is true then it means that the specific
- // handler handled the log by itself therefore no need to
- // proceed with the default behavior of printing the log
- // to the specified logger's output.
- //
- // It stops on the handler which returns true firstly.
- // The `Log` value holds the level of the print operation as well.
- func Handle(handler Handler) {
- Default.Handle(handler)
- }
- // Hijack adds a hijacker to the low-level logger's Printer.
- // If you need to implement such as a low-level hijacker manually,
- // then you have to make use of the pio library.
- func Hijack(hijacker func(ctx *pio.Ctx)) {
- Default.Hijack(hijacker)
- }
- // Scan scans everything from "r" and prints
- // its new contents to the logger's Printer's Output,
- // forever or until the returning "cancel" is fired, once.
- func Scan(r io.Reader) (cancel func()) {
- return Default.Scan(r)
- }
- // Child (creates if not exists and) returns a new child
- // Logger based on the current logger's fields.
- //
- // Can be used to separate logs by category.
- // If the "key" is string then it's used as prefix,
- // which is appended to the current prefix one.
- func Child(key interface{}) *Logger {
- return Default.Child(key)
- }
- // SetChildPrefix same as `SetPrefix` but it does NOT
- // override the existing, instead the given "s"
- // is appended to the current one. It's useful
- // to chian loggers with their own names/prefixes.
- // It does add the ": " in the end of "s" if it's missing.
- // It returns itself.
- func SetChildPrefix(s string) *Logger {
- return Default.SetChildPrefix(s)
- }
- // LastChild returns the last registered child Logger.
- func LastChild() *Logger {
- return Default.LastChild()
- }
|