12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package log
- import (
- "context"
- "io"
- "os"
- "time"
- )
- const defaultPattern = "%L %d-%T %f %M"
- var _defaultStdout = NewStdout()
- // StdoutHandler stdout log handler
- type StdoutHandler struct {
- out io.Writer
- render Render
- }
- // NewStdout create a stdout log handler
- func NewStdout() *StdoutHandler {
- return &StdoutHandler{
- out: os.Stderr,
- render: newPatternRender(defaultPattern),
- }
- }
- // Log stdout loging, only for developing env.
- func (h *StdoutHandler) Log(ctx context.Context, lv Level, args ...D) {
- d := make(map[string]interface{}, 10+len(args))
- for _, arg := range args {
- d[arg.Key] = arg.Value
- }
- // add extra fields
- addExtraField(ctx, d)
- d[_time] = time.Now().Format(_timeFormat)
- h.render.Render(h.out, d)
- h.out.Write([]byte("\n"))
- }
- // Close stdout loging
- func (h *StdoutHandler) Close() error {
- return nil
- }
- // SetFormat set stdout log output format
- // %T time format at "15:04:05.999"
- // %t time format at "15:04:05"
- // %D data format at "2006/01/02"
- // %d data format at "01/02"
- // %L log level e.g. INFO WARN ERROR
- // %f function name and line number e.g. model.Get:121
- // %i instance id
- // %e deploy env e.g. dev uat fat prod
- // %z zone
- // %S full file name and line number: /a/b/c/d.go:23
- // %s final file name element and line number: d.go:23
- // %M log message and additional fields: key=value this is log message
- func (h *StdoutHandler) SetFormat(format string) {
- h.render = newPatternRender(format)
- }
|