db logger

This commit is contained in:
2025-09-29 10:53:33 +03:00
parent c6b47d18f6
commit 3d1263b3e0
2 changed files with 41 additions and 8 deletions

14
bot.go
View File

@@ -100,6 +100,7 @@ func NewBot(settings *BotSettings) *Bot {
level = DEBUG
}
bot.logger = CreateLogger().Level(level).OpenFile(fmt.Sprintf("%s/main.log", strings.TrimRight(settings.LoggerBasePath, "/")))
bot.logger = bot.logger.PrintTraceback(true)
if settings.UseRequestLogger {
bot.requestLogger = CreateLogger().Level(level).Prefix("REQUESTS").OpenFile(fmt.Sprintf("%s/requests.log", strings.TrimRight(settings.LoggerBasePath, "/")))
}
@@ -120,6 +121,14 @@ func (b *Bot) InitDatabaseContext(ctx *DatabaseContext) *Bot {
b.dbContext = ctx
return b
}
func (b *Bot) AddDatabaseLogger(writer func(db *DatabaseContext) LoggerWriter) *Bot {
w := []LoggerWriter{writer(b.dbContext)}
b.logger.AddWriters(w)
if b.requestLogger != nil {
b.requestLogger.AddWriters(w)
}
return b
}
func (b *Bot) UpdateTypes(t ...string) *Bot {
b.updateTypes = make([]string, 0)
@@ -283,7 +292,8 @@ func (b *Bot) handleCallback(update *Update) {
for _, plugin := range b.plugins {
if plugin.UpdateListener != nil {
(*plugin.UpdateListener)(ctx, b.dbContext)
lis := *plugin.UpdateListener
lis(ctx, b.dbContext)
}
}
@@ -310,7 +320,7 @@ func (ctx *MsgContext) Answer(text string) {
_, err := ctx.Bot.SendMessage(&SendMessageP{
ChatID: ctx.Msg.Chat.ID,
Text: text,
ParseMode: "markdown",
ParseMode: ParseMD,
})
if err != nil {
ctx.Bot.logger.Error(err)

View File

@@ -11,11 +11,14 @@ import (
"github.com/fatih/color"
)
type LoggerWriter func(level LogLevel, prefix, traceback string, message []any)
type Logger struct {
prefix string
level LogLevel
printTraceback bool
printTime bool
writers []LoggerWriter
f *os.File
}
@@ -26,6 +29,10 @@ type LogLevel struct {
c color.Attribute
}
func (l *LogLevel) GetName() string {
return l.t
}
type MethodTraceback struct {
Package string
Method string
@@ -36,11 +43,11 @@ type MethodTraceback struct {
}
var (
INFO LogLevel = LogLevel{n: 0, t: "info", c: color.FgWhite}
WARN LogLevel = LogLevel{n: 1, t: "warn", c: color.FgHiYellow}
ERROR LogLevel = LogLevel{n: 2, t: "error", c: color.FgHiRed}
FATAL LogLevel = LogLevel{n: 3, t: "fatal", c: color.FgRed}
DEBUG LogLevel = LogLevel{n: 4, t: "debug", c: color.FgGreen}
INFO = LogLevel{n: 0, t: "info", c: color.FgWhite}
WARN = LogLevel{n: 1, t: "warn", c: color.FgHiYellow}
ERROR = LogLevel{n: 2, t: "error", c: color.FgHiRed}
FATAL = LogLevel{n: 3, t: "fatal", c: color.FgRed}
DEBUG = LogLevel{n: 4, t: "debug", c: color.FgGreen}
)
func CreateLogger() *Logger {
@@ -76,6 +83,14 @@ func (l *Logger) PrintTraceback(b bool) *Logger {
l.printTraceback = b
return l
}
func (l *Logger) PrintTime(b bool) *Logger {
l.printTime = b
return l
}
func (l *Logger) AddWriters(writers []LoggerWriter) *Logger {
l.writers = append(l.writers, writers...)
return l
}
func (l *Logger) Info(m ...any) {
l.print(INFO, m)
@@ -152,7 +167,15 @@ func (l *Logger) print(level LogLevel, m []any) {
if l.level.n < level.n {
return
}
color.New(level.c).Println(l.buildString(level, m))
_, err := color.New(level.c).Println(l.buildString(level, m))
if err != nil {
l.Fatal(err)
return
}
for _, writer := range l.writers {
writer(level, l.prefix, l.formatTraceback(l.getTraceback()), m)
}
if l.f != nil {
if _, err := l.f.Write([]byte(l.buildString(level, m) + "\n")); err != nil {