log

package
v2.36.0 Latest Latest
Warning

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

Go to latest
Published: Nov 10, 2022 License: MIT Imports: 16 Imported by: 1

README

Log

This logger will help you logging on a request - response cycle and show the stack trace of the error when you add log message. Logging level not supported. Level in this logger only for showing the severity level when add log messages.

NewLogger("service_name") will create a logger for you.

SetRequest(req interface{}) is function expecting *http.Request, then will extract required information from the request struct to fill the log. Later will support graphql and grpc also. Input can also a primitive type, and should be string. It will treat the input as the request body in string.

SetResponse(resp interface{}, body []byte) will extract the information for the log from resp, expecting *http.Response or http.ResponseWriter. Body will fill the response body in the log message.

AddMessage(lv Level, msg interface{}) add message to the logger along with severity level.

Print() print the log message, then flush. When no message added, it will not print anything.

Example:

logger := NewLogger("service_name")
	
logger.SetRequest(req) // req expected as *http.Request
logger.SetResponse(resp, string(b)) // resp expectes as *http.Response
logger.AddMessage(TraceLevel, "This is trace")
logger.AddMessage(DebugLevel, "This is debug")
logger.AddMessage(InfoLevel, "This is info")
logger.AddMessage(WarnLevel, "This is warning")
logger.AddMessage(ErrorLevel, errors.New("This is error"))
logger.AddMessage(FatalLevel, "This is fatal")
logger.AddMessage(PanicLevel, "This is panic")
logger.Print()

Output Example:

{"level":"trace","log_id":"7715f1d9-e983-11e9-9b3e-d0c5d396697d","service":"test_service","log_message":"This is trace","request_body":{"Mock":{},"Error":null,"UseNetwork":false,"StatusCode":200,"Header":{"Content-Type":["application/json"],"Time":["2019-09-30T10:25:14+07:00"],"X-Test-Response":["Hello"]},"Cookies":null,"BodyBuffer":"eyJpZCI6ImExMjM0LWFiY2QiLCJxdW90ZXMiOiJFdmVyeXRoaW5nIHRoZSBsaWdodCB0b3VjaGVzLCBpcyBvdXIga2luZ2RvbSJ9Cg==","ResponseDelay":0,"Mappers":null,"Filters":null},"response_body":"{\"id\":\"a1234-abcd\",\"quotes\":\"Everything the light touches, is our kingdom\"}\n","response_headers":{"Content-Type":["application/json"],"Time":["2019-09-30T10:25:14+07:00"],"X-Test-Response":["Hello"]},"stack":[{"message":"This is trace","level":"trace","file":"/data/works/perkakas/log/log_test.go","func":"github.com/kitabisa/perkakas/v2/log.(*LogTestSuite).TestLog","line":63},{"message":"This is debug","level":"debug","file":"/data/works/perkakas/log/log_test.go","func":"github.com/kitabisa/perkakas/v2/log.(*LogTestSuite).TestLog","line":64},{"message":"This is info","level":"info","file":"/data/works/perkakas/log/log_test.go","func":"github.com/kitabisa/perkakas/v2/log.(*LogTestSuite).TestLog","line":65},{"message":"This is warning","level":"warning","file":"/data/works/perkakas/log/log_test.go","func":"github.com/kitabisa/perkakas/v2/log.(*LogTestSuite).TestLog","line":66},{"message":"This is error","level":"error","file":"/data/works/perkakas/log/log_test.go","func":"github.com/kitabisa/perkakas/v2/log.(*LogTestSuite).TestLog","line":67},{"message":"This is fatal","level":"fatal","file":"/data/works/perkakas/log/log_test.go","func":"github.com/kitabisa/perkakas/v2/log.(*LogTestSuite).TestLog","line":68},{"message":"This is panic","level":"panic","file":"/data/works/perkakas/log/log_test.go","func":"github.com/kitabisa/perkakas/v2/log.(*LogTestSuite).TestLog","line":69}]}

Documentation

Index

Constants

View Source
const (
	FieldLogID           = "log_id"
	FieldHTTPStatus      = "http_status"
	FieldEndpoint        = "endpoint"
	FieldMethod          = "method"
	FieldServiceName     = "service"
	FieldUserID          = "user_id"
	FieldRequestBody     = "request_body"
	FieldRequestHeaders  = "request_headers"
	FieldResponseBody    = "response_body"
	FieldResponseHeaders = "response_headers"
)

Variables

This section is empty.

Functions

func GetSublogger added in v2.12.0

func GetSublogger(ctx context.Context, ctxName string) zerolog.Logger

GetSublogger get zerolog sublogger TODO: TO BE DEPRECATED after v2.14.6

func Zlogger added in v2.15.0

func Zlogger(ctx context.Context) *zerolog.Logger

Zlogger get zerolog sublogger from context

Types

type Level

type Level uint32
const (
	PanicLevel Level = iota
	FatalLevel
	ErrorLevel
	WarnLevel
	InfoLevel
	DebugLevel
	TraceLevel
)

func (Level) MarshalText

func (level Level) MarshalText() ([]byte, error)

type Logger

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

func NewLogger

func NewLogger(serviceName string) (logger *Logger)

func (*Logger) AddMessage

func (l *Logger) AddMessage(level Level, message ...interface{}) *Logger

func (*Logger) NewChildLogger added in v2.3.0

func (l *Logger) NewChildLogger() (logger *Logger)

func (*Logger) Print

func (l *Logger) Print(directMsg ...interface{})

func (*Logger) SetRequest

func (l *Logger) SetRequest(req interface{})

func (*Logger) SetResponse

func (l *Logger) SetResponse(res interface{}, body []byte)

Jump to

Keyboard shortcuts

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