log

package module
v2.1.1+incompatible Latest Latest
Warning

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

Go to latest
Published: Dec 8, 2017 License: Apache-2.0 Imports: 16 Imported by: 22

README

go-log

Go Report Card GoDoc

Logging package similar to log4j for the Golang.

  • Support dynamic log level
  • Daily log file output
  • Fixed size log file ouput
  • Output console and file all at once
  • Output full stack
  • Output goroutinue id to console
  • Output colorized level to console

Installation

$ go get github.com/subchen/go-log

Usage

Default log to console
package main

import (
    "os"
    "errors"
    "github.com/subchen/go-log"
)

func main() {
    log.Debugf("app = %s", os.Args[0])
    log.Errorf("error = %v", errors.New("some error"))

    // dynamic set level
    log.SetLevel(log.L_INFO)

    log.Debug("cannot output debug message")
    log.Info("can output info message")
}
Output to file

You can call SetWriter to set a file writer into log.

log.SetWriter(&log.FixedSizeFileWriter{
    Name:     "/tmp/test.log",
    MaxSize:  10 * 1024 * 1024, // 10m
    MaxCount: 10,
})
We defined three writers for use
// Create log file if file size large than fixed size (10m)
// files: /tmp/test.log.0 .. test.log.10
&log.FixedSizeFileWriter{
    Name:     "/tmp/test.log",
    MaxSize:  10 * 1024 * 1024, // 10m
    MaxCount: 10,
}

// Create log file every day.
// files: /tmp/test.log.20160102
&log.DailyFileWriter{
    Name: "/tmp/test.log",
    MaxCount: 10,
}

// Create log file every process.
// files: /tmp/test.log.20160102_150405
&log.AlwaysNewFileWriter{
    Name: "/tmp/test.log",
    MaxCount: 10,
}

// Output to multiple writes
io.MultiWriter(
    os.Stdout,
    &log.DailyFileWriter{
        Name: "/tmp/test.log",
        MaxCount: 10,
    }
    //...
)
New log instance
import (
    "github.com/subchen/go-log"
)

func main() {
    logger := log.New(&log.DailyFileWriter{
        Name: "/tmp/test.log",
    })

    logger.Debugf("i = %d", 99)
}
Output stack

You can use log.Fatal(...) or log.Fatalf(...) to output full stack

21:04:32.884 main FATAL logger_test.go:24 this is a fatal message
	at /go/src/github.com/subchen/go-log/logger_test.go:24 (0x81db3)
	at /usr/local/Cellar/go/1.5.2/libexec/src/testing/testing.go:456 (0x786c8)
	at /usr/local/Cellar/go/1.5.2/libexec/src/runtime/asm_amd64.s:1721 (0x59641)
Log format
# time pid [name] [gid] level file:line message
2016-02-10 19:33:02.587 12345 main 987 INFO fixed_size_file_writer_test.go:16 message ...
  • log.SetTimeFormat("2006-01-02 15:04:05.999") customize time format
  • log.SetAppName("main") add a name in log for indicate process
  • log.SetFlags(F_TIME | F_LONG_FILE | F_SHORT_FILE | F_PID | F_GID | F_COLOR) to control what's printed
API on godoc.org

https://godoc.org/github.com/subchen/go-log

Documentation

Overview

Package log implements a common logging like log4j.

Index

Examples

Constants

View Source
const (
	// log level
	L_DEBUG = iota
	L_INFO
	L_WARN
	L_ERROR
	L_FATAL
	L_OFF

	// Bits or'ed together to control what's printed.
	F_TIME = 1 << iota
	F_LONG_FILE
	F_SHORT_FILE
	F_PID
	F_GID
	F_COLOR

	// default flags
	DEFAULT_FLAGS = F_TIME | F_SHORT_FILE | F_PID

	// default time format
	DEFAULT_TIME_FORMAT = "2006-01-02 15:04:05.000"
)

Variables

This section is empty.

Functions

func Debug

func Debug(obj ...interface{})

Output a debug message

func Debugf

func Debugf(msg string, args ...interface{})

Output a debug message

func Error

func Error(obj ...interface{})

Output an error message

func Errorf

func Errorf(msg string, args ...interface{})

Output an error message

func Fatal

func Fatal(obj ...interface{})

Output a fatal message with full stack

func Fatalf

func Fatalf(msg string, args ...interface{})

Output a fatal message with full stack

func GetAppName

func GetAppName() string

Get the process name

func GetFlags

func GetFlags() int

Get the flags for output format

func GetLevel

func GetLevel() int

Get log level

func GetLevelName

func GetLevelName() string

Get log level name

func GetTimeFormat

func GetTimeFormat() string

Get time format for log line

func Info

func Info(obj ...interface{})

Output an info message

func Infof

func Infof(msg string, args ...interface{})

Output an info message

func IsDebugEnabled

func IsDebugEnabled() bool

Indicate whether output debug message

func IsErrorEnabled

func IsErrorEnabled() bool

Indicate whether output error message

func IsFatalEnabled

func IsFatalEnabled() bool

Indicate whether output fatal message

func IsInfoEnabled

func IsInfoEnabled() bool

Indicate whether output info message

func IsWarnEnabled

func IsWarnEnabled() bool

Indicate whether output warning message

func SetAppName

func SetAppName(name string)

Set a process name

func SetFlags

func SetFlags(flags int)

Set flags for output format

func SetLevel

func SetLevel(level int)

Set log level

func SetLevelName

func SetLevelName(level string)

Set log level name

func SetTimeFormat

func SetTimeFormat(format string)

Set time format for log line

func SetWriter

func SetWriter(w io.Writer)

Set a writer

func Warn

func Warn(obj ...interface{})

Output a warning message

func Warnf

func Warnf(msg string, args ...interface{})

Output a warning message

Types

type AlwaysNewFileWriter

type AlwaysNewFileWriter struct {
	Name     string
	MaxCount int
	// contains filtered or unexported fields
}

AlwaysNewFileWriter create new log for every process

Example
log.SetWriter(&log.AlwaysNewFileWriter{
	Name:     "/tmp/test.log",
	MaxCount: 10,
})
Output:

func (*AlwaysNewFileWriter) Write

func (w *AlwaysNewFileWriter) Write(p []byte) (n int, err error)

type DailyFileWriter

type DailyFileWriter struct {
	Name     string
	MaxCount int
	// contains filtered or unexported fields
}

DailyFileWriter create new log for every day

Example
log.SetWriter(&log.DailyFileWriter{
	Name:     "/tmp/test.log",
	MaxCount: 10,
})
Output:

func (*DailyFileWriter) Write

func (w *DailyFileWriter) Write(p []byte) (n int, err error)

type FixedSizeFileWriter

type FixedSizeFileWriter struct {
	Name     string
	MaxSize  int64
	MaxCount int
	// contains filtered or unexported fields
}

FixedSizeFileWriter create new log if log size exceed

Example
log.SetWriter(&log.FixedSizeFileWriter{
	Name:     "/tmp/test.log",
	MaxSize:  10 * 1024 * 1024, // 10M
	MaxCount: 10,
})
Output:

func (*FixedSizeFileWriter) Write

func (w *FixedSizeFileWriter) Write(p []byte) (n int, err error)

type Logger

type Logger struct {
	// contains filtered or unexported fields
}

func New

func New(out io.Writer) *Logger
Example
logger := log.New(os.Stdout)
logger.SetAppName("app")
logger.SetFlags(log.DEFAULT_FLAGS | log.F_GID)

logger.Info("testing ...")
logger.Errorf("err = %v", os.ErrInvalid)
// Outputs:
// 2001-10-10 12:00:00,000 1234 app 987 INFO main.go:13 testing ...
// 2001-10-10 12:00:00,000 1234 app 987 ERROR main.go:14 err = invalid argument
Output:

func (*Logger) Debug

func (l *Logger) Debug(obj ...interface{})

func (*Logger) Debugf

func (l *Logger) Debugf(msg string, args ...interface{})

func (*Logger) Error

func (l *Logger) Error(obj ...interface{})

func (*Logger) Errorf

func (l *Logger) Errorf(msg string, args ...interface{})

func (*Logger) Fatal

func (l *Logger) Fatal(obj ...interface{})

func (*Logger) Fatalf

func (l *Logger) Fatalf(msg string, args ...interface{})

func (*Logger) GetAppName

func (l *Logger) GetAppName() string

func (*Logger) GetFlags

func (l *Logger) GetFlags() int

func (*Logger) GetLevel

func (l *Logger) GetLevel() int

func (*Logger) GetLevelName

func (l *Logger) GetLevelName() string

func (*Logger) GetTimeFormat

func (l *Logger) GetTimeFormat() string

func (*Logger) Info

func (l *Logger) Info(obj ...interface{})

func (*Logger) Infof

func (l *Logger) Infof(msg string, args ...interface{})

func (*Logger) IsDebugEnabled

func (l *Logger) IsDebugEnabled() bool

func (*Logger) IsErrorEnabled

func (l *Logger) IsErrorEnabled() bool

func (*Logger) IsFatalEnabled

func (l *Logger) IsFatalEnabled() bool

func (*Logger) IsInfoEnabled

func (l *Logger) IsInfoEnabled() bool

func (*Logger) IsWarnEnabled

func (l *Logger) IsWarnEnabled() bool

func (*Logger) SetAppName

func (l *Logger) SetAppName(name string) *Logger

func (*Logger) SetFlags

func (l *Logger) SetFlags(flags int) *Logger

func (*Logger) SetLevel

func (l *Logger) SetLevel(level int) *Logger

func (*Logger) SetLevelName

func (l *Logger) SetLevelName(level string)

func (*Logger) SetTimeFormat

func (l *Logger) SetTimeFormat(format string) *Logger

func (*Logger) SetWriter

func (l *Logger) SetWriter(w io.Writer) *Logger

func (*Logger) SkipCaller

func (l *Logger) SkipCaller(skip int) *Logger

func (*Logger) Warn

func (l *Logger) Warn(obj ...interface{})

func (*Logger) Warnf

func (l *Logger) Warnf(msg string, args ...interface{})

Jump to

Keyboard shortcuts

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