mirror of
https://github.com/romychs/Ocean-240.2-Emulator.git
synced 2026-04-21 11:03:21 +03:00
86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
package logger
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strconv"
|
|
"strings"
|
|
"syscall"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var logFile *os.File = nil
|
|
var logBuffer *bufio.Writer = nil
|
|
|
|
type LogFormatter struct {
|
|
}
|
|
|
|
func (f *LogFormatter) Format(entry *log.Entry) ([]byte, error) {
|
|
caller := "-"
|
|
if entry.HasCaller() {
|
|
caller = filepath.Base(entry.Caller.File) + ":" + strconv.Itoa(entry.Caller.Line)
|
|
}
|
|
lvl := strings.ToUpper(entry.Level.String())
|
|
if len(lvl) > 0 {
|
|
lvl = lvl[0:1]
|
|
} else {
|
|
lvl = "-"
|
|
}
|
|
logMessage := fmt.Sprintf("%s[%s][%s]: %s\n", entry.Time.Format("2006-01-02T15:04:05"), lvl, caller, entry.Message) //time.RFC3339
|
|
|
|
return []byte(logMessage), nil
|
|
}
|
|
|
|
// InitLogging Initialise logging format and level
|
|
func InitLogging() {
|
|
log.SetFormatter(new(LogFormatter))
|
|
log.SetLevel(log.DebugLevel)
|
|
log.SetReportCaller(true)
|
|
log.SetOutput(os.Stdout)
|
|
}
|
|
|
|
// FlushLogs Flush logs if logging to file
|
|
func FlushLogs() {
|
|
if logBuffer != nil {
|
|
err := logBuffer.Flush()
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// ReconfigureLogging Reconfigure logging by config values
|
|
func ReconfigureLogging(config *config.ServiceConfig) {
|
|
// redirect logging if log file specified
|
|
if len(config.LogFile) > 0 {
|
|
var err error
|
|
logFile, err = os.OpenFile(config.LogFile, os.O_WRONLY|syscall.O_CREAT|syscall.O_APPEND, 0664)
|
|
if err != nil {
|
|
log.Fatalf("Can not access to log file: %s\n%v", config.LogFile, err)
|
|
}
|
|
logBuffer = bufio.NewWriter(logFile)
|
|
log.SetOutput(logBuffer)
|
|
}
|
|
if len(config.LogLevel) > 0 {
|
|
level, err := log.ParseLevel(config.LogLevel)
|
|
if err != nil {
|
|
log.Fatalf("Can not parse log level: %s\n%v", config.LogLevel, err)
|
|
}
|
|
log.SetLevel(level)
|
|
}
|
|
}
|
|
|
|
// CloseLogs If log output is file, flush and close it
|
|
func CloseLogs() {
|
|
FlushLogs()
|
|
if logFile != nil {
|
|
err := logFile.Close()
|
|
if err != nil {
|
|
log.Warnf("Can not close log file: %s\n%v", logFile.Name(), err)
|
|
}
|
|
}
|
|
}
|