42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package l4g
|
|
|
|
import (
|
|
"os"
|
|
)
|
|
|
|
// dbWriter is the app-supplied sink that persists a log Entry to the database.
|
|
// The framework cannot import the app's repository, so the app registers a
|
|
// writer at startup via SetDatabaseWriter. If none is registered, the database
|
|
// logger falls back to the terminal so log lines are never silently dropped.
|
|
var dbWriter func(Entry) error
|
|
|
|
// SetDatabaseWriter registers the function the database logger uses to persist
|
|
// entries. Apps typically wire it to their repository:
|
|
//
|
|
// l4g.SetDatabaseWriter(func(e l4g.Entry) error {
|
|
// return repository.InsertLogEntry(context.Background(), models.LogEntry(e))
|
|
// })
|
|
func SetDatabaseWriter(w func(Entry) error) { dbWriter = w }
|
|
|
|
type DatabaseLogger struct{}
|
|
|
|
func NewDatabaseLogger() *DatabaseLogger {
|
|
return &DatabaseLogger{}
|
|
}
|
|
|
|
func (d *DatabaseLogger) Write(entry Entry) error {
|
|
if dbWriter == nil {
|
|
return NewTerminalLogger().Write(entry)
|
|
}
|
|
return dbWriter(entry)
|
|
}
|
|
|
|
func (d *DatabaseLogger) Fatal(entry Entry) error {
|
|
err := d.Write(entry)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
os.Exit(1)
|
|
return nil
|
|
}
|