2018-03-04 17:52:55 -05:00
|
|
|
package go_i2cp
|
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
const (
|
2018-03-11 15:00:46 -04:00
|
|
|
PROTOCOL = 1 << 0
|
|
|
|
LOGIC = 1 << 1
|
|
|
|
|
|
|
|
DEBUG = 1 << 4
|
|
|
|
INFO = 1 << 5
|
|
|
|
WARNING = 1 << 6
|
|
|
|
ERROR = 1 << 7
|
|
|
|
FATAL = 1 << 8
|
|
|
|
|
|
|
|
STRINGMAP = 1 << 9
|
|
|
|
INTMAP = 1 << 10
|
|
|
|
QUEUE = 1 << 11
|
|
|
|
STREAM = 1 << 12
|
|
|
|
CRYPTO = 1 << 13
|
|
|
|
TCP = 1 << 14
|
|
|
|
CLIENT = 1 << 15
|
|
|
|
CERTIFICATE = 1 << 16
|
|
|
|
LEASE = 1 << 17
|
|
|
|
DESTINATION = 1 << 18
|
|
|
|
SESSION = 1 << 19
|
|
|
|
SESSION_CONFIG = 1 << 20
|
|
|
|
TEST = 1 << 21
|
|
|
|
DATAGRAM = 1 << 22
|
|
|
|
CONFIG_FILE = 1 << 23
|
|
|
|
VERSION = 1 << 24
|
2018-03-04 17:52:55 -05:00
|
|
|
|
|
|
|
TAG_MASK = 0x0000000f
|
|
|
|
LEVEL_MASK = 0x000001f0
|
|
|
|
COMPONENT_MASK = 0xfffffe00
|
|
|
|
|
|
|
|
ALL = 0xffffffff
|
|
|
|
)
|
|
|
|
|
|
|
|
type LoggerTags = uint32
|
|
|
|
type LoggerCallbacks struct {
|
|
|
|
opaque *interface{}
|
|
|
|
onLog func(*Logger, LoggerTags, string)
|
|
|
|
}
|
|
|
|
type Logger struct {
|
|
|
|
callbacks *LoggerCallbacks
|
|
|
|
logLevel int
|
|
|
|
}
|
|
|
|
|
2018-03-11 15:00:46 -04:00
|
|
|
var logInstance = &Logger{}
|
2018-03-04 17:52:55 -05:00
|
|
|
|
|
|
|
// TODO filter
|
|
|
|
func LogInit(callbacks *LoggerCallbacks, level int) {
|
|
|
|
logInstance = &Logger{callbacks: callbacks}
|
|
|
|
logInstance.setLogLevel(level)
|
|
|
|
}
|
|
|
|
func Debug(tags LoggerTags, message string, args ...interface{}) {
|
2019-07-10 22:05:17 -04:00
|
|
|
if len(args) == 0 {
|
|
|
|
logInstance.log(tags|DEBUG, message)
|
|
|
|
return
|
|
|
|
}
|
2018-03-04 17:52:55 -05:00
|
|
|
logInstance.log(tags|DEBUG, message, args...)
|
|
|
|
}
|
|
|
|
func Info(tags LoggerTags, message string, args ...interface{}) {
|
2019-07-10 22:05:17 -04:00
|
|
|
if len(args) == 0 {
|
|
|
|
logInstance.log(tags|INFO, message)
|
|
|
|
return
|
|
|
|
}
|
2018-03-04 17:52:55 -05:00
|
|
|
logInstance.log(tags|INFO, message, args...)
|
2019-07-10 22:05:17 -04:00
|
|
|
//logInstance.log(tags|INFO, message, args...)
|
2018-03-04 17:52:55 -05:00
|
|
|
}
|
|
|
|
func Warning(tags LoggerTags, message string, args ...interface{}) {
|
2019-07-10 22:05:17 -04:00
|
|
|
if len(args) == 0 {
|
|
|
|
logInstance.log(tags|WARNING, message)
|
|
|
|
return
|
|
|
|
}
|
2018-03-04 17:52:55 -05:00
|
|
|
logInstance.log(tags|WARNING, message, args...)
|
2019-07-10 22:05:17 -04:00
|
|
|
//logInstance.log(tags|WARNING, message, args...)
|
2018-03-04 17:52:55 -05:00
|
|
|
}
|
|
|
|
func Error(tags LoggerTags, message string, args ...interface{}) {
|
2019-07-10 22:05:17 -04:00
|
|
|
if len(args) == 0 {
|
|
|
|
logInstance.log(tags|ERROR, message)
|
|
|
|
return
|
|
|
|
}
|
2018-03-04 17:52:55 -05:00
|
|
|
logInstance.log(tags|ERROR, message, args...)
|
2019-07-10 22:05:17 -04:00
|
|
|
//logInstance.log(tags|ERROR, message, args...)
|
2018-03-04 17:52:55 -05:00
|
|
|
}
|
|
|
|
func Fatal(tags LoggerTags, message string, args ...interface{}) {
|
2019-07-10 22:05:17 -04:00
|
|
|
if len(args) == 0 {
|
|
|
|
logInstance.log(tags|FATAL, message)
|
|
|
|
return
|
|
|
|
}
|
2018-03-04 17:52:55 -05:00
|
|
|
logInstance.log(tags|FATAL, message, args...)
|
2019-07-10 22:05:17 -04:00
|
|
|
//logInstance.log(tags|FATAL, message, args...)
|
2018-03-04 17:52:55 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
func (l *Logger) log(tags LoggerTags, format string, args ...interface{}) {
|
2019-07-10 22:05:17 -04:00
|
|
|
if len(args) != 0 {
|
|
|
|
if l.callbacks == nil {
|
|
|
|
fmt.Printf(format+"\n", args)
|
|
|
|
} else {
|
|
|
|
l.callbacks.onLog(l, tags, fmt.Sprintf(format, args...))
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
2018-03-04 17:52:55 -05:00
|
|
|
if l.callbacks == nil {
|
2019-07-10 22:05:17 -04:00
|
|
|
fmt.Printf(format + "\n")
|
2018-03-04 17:52:55 -05:00
|
|
|
} else {
|
2019-07-10 22:05:17 -04:00
|
|
|
l.callbacks.onLog(l, tags, fmt.Sprintf(format))
|
2018-03-04 17:52:55 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (l *Logger) setLogLevel(level int) {
|
|
|
|
switch level {
|
|
|
|
case DEBUG:
|
|
|
|
case INFO:
|
|
|
|
case WARNING:
|
|
|
|
case ERROR:
|
|
|
|
case FATAL:
|
|
|
|
l.logLevel = level
|
|
|
|
default:
|
|
|
|
l.logLevel = ERROR
|
|
|
|
}
|
|
|
|
}
|