| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package log
- import (
- "sync/atomic"
- "unsafe"
- "v2ray.com/core/common/serial"
- )
- // Message is the interface for all log messages.
- type Message interface {
- String() string
- }
- // Handler is the interface for log handler.
- type Handler interface {
- Handle(msg Message)
- }
- // GeneralMessage is a general log message that can contain all kind of content.
- type GeneralMessage struct {
- Severity Severity
- Content interface{}
- }
- // String implements Message.
- func (m *GeneralMessage) String() string {
- return serial.Concat("[", m.Severity, "]: ", m.Content)
- }
- // Record writes a message into log stream.
- func Record(msg Message) {
- h := (*Handler)(atomic.LoadPointer(&logHandler))
- (*h).Handle(msg)
- }
- var (
- logHandler unsafe.Pointer
- )
- // RegisterHandler register a new handler as current log handler. Previous registered handler will be discarded.
- func RegisterHandler(handler Handler) {
- if handler == nil {
- panic("Log handler is nil")
- }
- atomic.StorePointer(&logHandler, unsafe.Pointer(&handler))
- }
|