| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package log
- import (
- "fmt"
- "github.com/v2ray/v2ray-core/common/serial"
- )
- const (
- DebugLevel = LogLevel(0)
- InfoLevel = LogLevel(1)
- WarningLevel = LogLevel(2)
- ErrorLevel = LogLevel(3)
- )
- type errorLog struct {
- prefix string
- values []interface{}
- }
- func (this *errorLog) String() string {
- data := ""
- for _, value := range this.values {
- switch typedVal := value.(type) {
- case string:
- data += typedVal
- case *string:
- data += *typedVal
- case serial.String:
- data += typedVal.String()
- case error:
- data += typedVal.Error()
- default:
- data += fmt.Sprintf("%v", value)
- }
- }
- return this.prefix + data
- }
- var (
- noOpLoggerInstance logWriter = &noOpLogWriter{}
- streamLoggerInstance logWriter = newStdOutLogWriter()
- debugLogger = noOpLoggerInstance
- infoLogger = noOpLoggerInstance
- warningLogger = streamLoggerInstance
- errorLogger = streamLoggerInstance
- )
- 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
- }
- }
- func InitErrorLogger(file string) error {
- logger, err := newFileLogWriter(file)
- if err != nil {
- Error("Failed to create error logger on file (", file, "): ", err)
- return err
- }
- streamLoggerInstance = logger
- return nil
- }
- // Debug outputs a debug log with given format and optional arguments.
- func Debug(v ...interface{}) {
- debugLogger.Log(&errorLog{
- prefix: "[Debug]",
- values: v,
- })
- }
- // Info outputs an info log with given format and optional arguments.
- func Info(v ...interface{}) {
- infoLogger.Log(&errorLog{
- prefix: "[Info]",
- values: v,
- })
- }
- // Warning outputs a warning log with given format and optional arguments.
- func Warning(v ...interface{}) {
- warningLogger.Log(&errorLog{
- prefix: "[Warning]",
- values: v,
- })
- }
- // Error outputs an error log with given format and optional arguments.
- func Error(v ...interface{}) {
- errorLogger.Log(&errorLog{
- prefix: "[Error]",
- values: v,
- })
- }
|