| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | package logimport (	"v2ray.com/core/common/log/internal")type LogLevel intconst (	DebugLevel   = LogLevel(0)	InfoLevel    = LogLevel(1)	WarningLevel = LogLevel(2)	ErrorLevel   = LogLevel(3)	NoneLevel    = LogLevel(999))var (	streamLoggerInstance internal.LogWriter = internal.NewStdOutLogWriter()	debugLogger   internal.LogWriter = streamLoggerInstance	infoLogger    internal.LogWriter = streamLoggerInstance	warningLogger internal.LogWriter = streamLoggerInstance	errorLogger   internal.LogWriter = streamLoggerInstance)func SetLogLevel(level LogLevel) {	debugLogger = new(internal.NoOpLogWriter)	if level <= DebugLevel {		debugLogger = streamLoggerInstance	}	infoLogger = new(internal.NoOpLogWriter)	if level <= InfoLevel {		infoLogger = streamLoggerInstance	}	warningLogger = new(internal.NoOpLogWriter)	if level <= WarningLevel {		warningLogger = streamLoggerInstance	}	errorLogger = new(internal.NoOpLogWriter)	if level <= ErrorLevel {		errorLogger = streamLoggerInstance	}	if level == NoneLevel {		accessLoggerInstance = new(internal.NoOpLogWriter)	}}func InitErrorLogger(file string) error {	logger, err := internal.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(&internal.ErrorLog{		Prefix: "[Debug]",		Values: v,	})}// Info outputs an info log with given format and optional arguments.func Info(v ...interface{}) {	infoLogger.Log(&internal.ErrorLog{		Prefix: "[Info]",		Values: v,	})}// Warning outputs a warning log with given format and optional arguments.func Warning(v ...interface{}) {	warningLogger.Log(&internal.ErrorLog{		Prefix: "[Warning]",		Values: v,	})}// Error outputs an error log with given format and optional arguments.func Error(v ...interface{}) {	errorLogger.Log(&internal.ErrorLog{		Prefix: "[Error]",		Values: v,	})}func Close() {	streamLoggerInstance.Close()	accessLoggerInstance.Close()}
 |