71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
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)
|
||
}
|
||
|