| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package log
- import (
- "fmt"
- "io"
- "os"
- "github.com/v2ray/v2ray-core/common/platform"
- )
- const (
- DebugLevel = LogLevel(0)
- InfoLevel = LogLevel(1)
- WarningLevel = LogLevel(2)
- ErrorLevel = LogLevel(3)
- )
- type logger interface {
- WriteLog(prefix, format string, v ...interface{})
- }
- type noOpLogger struct {
- }
- func (l *noOpLogger) WriteLog(prefix, format string, v ...interface{}) {
- // Swallow
- }
- type streamLogger struct {
- writer io.Writer
- }
- func (l *streamLogger) WriteLog(prefix, format string, v ...interface{}) {
- var data string
- if v == nil || len(v) == 0 {
- data = format
- } else {
- data = fmt.Sprintf(format, v...)
- }
- l.writer.Write([]byte(prefix + data + platform.LineSeparator()))
- }
- var (
- noOpLoggerInstance logger = &noOpLogger{}
- streamLoggerInstance logger = &streamLogger{
- writer: os.Stdout,
- }
- debugLogger = noOpLoggerInstance
- infoLogger = noOpLoggerInstance
- warningLogger = noOpLoggerInstance
- errorLogger = noOpLoggerInstance
- )
- type LogLevel int
- func SetLogLevel(level LogLevel) {
- debugLogger = noOpLoggerInstance
- if level <= DebugLevel {
- debugLogger = streamLoggerInstance
- }
- infoLogger = noOpLoggerInstance
- if level <= InfoLevel {
- infoLogger = streamLoggerInstance
- }
- warningLogger = noOpLoggerInstance
- if level <= WarningLevel {
- warningLogger = streamLoggerInstance
- }
- errorLogger = noOpLoggerInstance
- if level <= ErrorLevel {
- errorLogger = streamLoggerInstance
- }
- }
- // Debug outputs a debug log with given format and optional arguments.
- func Debug(format string, v ...interface{}) {
- debugLogger.WriteLog("[Debug]", format, v...)
- }
- // Info outputs an info log with given format and optional arguments.
- func Info(format string, v ...interface{}) {
- infoLogger.WriteLog("[Info]", format, v...)
- }
- // Warning outputs a warning log with given format and optional arguments.
- func Warning(format string, v ...interface{}) {
- warningLogger.WriteLog("[Warning]", format, v...)
- }
- // Error outputs an error log with given format and optional arguments.
- func Error(format string, v ...interface{}) {
- errorLogger.WriteLog("[Error]", format, v...)
- }
|