1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-07-04 13:05:24 +00:00
v2fly/common/log/log.go

48 lines
1006 B
Go
Raw Normal View History

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