logfrog-go/record.go

57 lines
1.5 KiB
Go

package logfrog
import (
"runtime"
"time"
"github.com/qdm12/reprint"
)
type LogCaller struct {
File string `json:"file"`
Line int `json:"line"`
Funcname string `json:"funcname,omitempty"`
}
func captureCaller(skip int) *LogCaller {
pc, filename, line, ok := runtime.Caller(skip + 1)
if !ok {
return nil
}
c := &LogCaller { filename, line, "?()" }
fn := runtime.FuncForPC(pc)
if fn != nil {
c.Funcname = fn.Name() + "()"
}
return c
}
// --------------------------------------------------------------------------------
type Fields map[string]interface{}
// --------------------------------------------------------------------------------
type LogRecord struct {
Source string `json:"source,omitempty"`
Created time.Time `json:"created_at"`
Level LogLevel `json:"lvl"`
Message string `json:"msg"`
Caller *LogCaller `json:"caller,omitempty"`
Fields Fields `json:"fields"`
}
func (r *LogRecord) Clone() *LogRecord {
c := reprint.This(r)
return c.(*LogRecord)
}
func NewLogRecord(skip int, created time.Time, level LogLevel, message string, fields Fields) *LogRecord {
return &LogRecord{ "", created, level, message, captureCaller(skip + 1), fields }
}
func newLogRecordFromSource(source *Logger, skip int, created time.Time, level LogLevel, message string, fields Fields) *LogRecord {
return &LogRecord{ source.GetName(), created, level, message, captureCaller(skip + 1), fields }
}