package logger import ( "fmt" "log" "os" "runtime" "strings" ) var ( debugMode bool logger *log.Logger ) func init() { mode := os.Getenv("GO_SPEECH_MODE") debugMode = (mode != "release") logger = log.New(os.Stdout, "", log.LstdFlags|log.Lmicroseconds) } // IsDebug возвращает true, если включен режим отладки func IsDebug() bool { return debugMode } // Debug логирует сообщение только в режиме отладки func Debug(format string, v ...interface{}) { if debugMode { logMessage("DEBUG", format, v...) } } // Info логирует информационное сообщение func Info(format string, v ...interface{}) { logMessage("INFO", format, v...) } // Error логирует сообщение об ошибке func Error(format string, v ...interface{}) { logMessage("ERROR", format, v...) } // Warn логирует предупреждение func Warn(format string, v ...interface{}) { logMessage("WARN", format, v...) } // DebugWithContext логирует сообщение с контекстом (файл и строка) func DebugWithContext(format string, v ...interface{}) { if debugMode { _, file, line, ok := runtime.Caller(1) if ok { file = file[strings.LastIndex(file, "/")+1:] logMessage("DEBUG", fmt.Sprintf("[%s:%d] %s", file, line, format), v...) } else { logMessage("DEBUG", format, v...) } } } // logMessage форматирует и выводит сообщение func logMessage(level, format string, v ...interface{}) { message := format if len(v) > 0 { message = fmt.Sprintf(format, v...) } logger.Printf("[%s] %s", level, message) }