1 Commits

Author SHA1 Message Date
Adrian Zuercher
29f3ee26f9 new config options and error handles new input any 2025-04-21 12:59:16 +02:00
5 changed files with 77 additions and 18 deletions

5
go.mod
View File

@@ -2,6 +2,9 @@ module github.com/tecamino/tecamino-logger
go 1.21.0 go 1.21.0
require go.uber.org/zap v1.27.0 require (
go.uber.org/zap v1.27.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
)
require go.uber.org/multierr v1.10.0 // indirect require go.uber.org/multierr v1.10.0 // indirect

2
go.sum
View File

@@ -10,5 +10,7 @@ go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

19
logging/cgf.go Normal file
View File

@@ -0,0 +1,19 @@
package logging
type Config struct {
MaxSize int // max. size of file in MB
MaxBackup int //
MaxAge int
Debug bool
TerminalOut bool
}
func DefaultConfig() *Config {
return &Config{
Debug: false,
TerminalOut: false,
MaxSize: 1,
MaxBackup: 3,
MaxAge: 28,
}
}

View File

@@ -7,6 +7,7 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
) )
type Level zapcore.Level type Level zapcore.Level
@@ -24,14 +25,14 @@ type Logger struct {
debugging bool debugging bool
} }
func NewLogger(name string, debug bool) (*Logger, error) { func NewLogger(file string, cfg *Config) (*Logger, error) {
if name == "" { if cfg == nil {
name = "NewLogger" cfg = DefaultConfig()
} }
file, err := os.OpenFile(fmt.Sprintf("%s.log", name), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil { if file == "" {
return nil, err file = "NewLogger.log"
} }
encoderConfig := zap.NewProductionEncoderConfig() encoderConfig := zap.NewProductionEncoderConfig()
@@ -41,13 +42,42 @@ func NewLogger(name string, debug bool) (*Logger, error) {
} }
encoder := zapcore.NewJSONEncoder(encoderConfig) encoder := zapcore.NewJSONEncoder(encoderConfig)
fileSyncer := zapcore.AddSync(&lumberjack.Logger{
Filename: file,
MaxSize: 1, // megabytes
MaxBackups: 3,
MaxAge: 28, // days
})
// Create core list
var cores []zapcore.Core
// File core (always added)
cores = append(cores, zapcore.NewCore(encoder, fileSyncer, zapcore.InfoLevel))
// Optional stdout core
if cfg.TerminalOut {
stdoutSyncer := zapcore.AddSync(zapcore.Lock(os.Stdout))
cores = append(cores, zapcore.NewCore(encoder, stdoutSyncer, zapcore.InfoLevel))
}
combinedCore := zapcore.NewTee(cores...)
// If debugging, add a separate debug core (to both file and stdout if requested)
var debugCores []zapcore.Core
debugCores = append(debugCores, zapcore.NewCore(encoder, fileSyncer, zapcore.DebugLevel))
if cfg.TerminalOut {
stdoutSyncer := zapcore.AddSync(zapcore.Lock(os.Stdout))
debugCores = append(debugCores, zapcore.NewCore(encoder, stdoutSyncer, zapcore.DebugLevel))
}
debugCore := zapcore.NewTee(debugCores...)
// Build the logger // Build the logger
return &Logger{ return &Logger{
log: zap.New(zapcore.NewCore(encoder, zapcore.AddSync(file), zapcore.InfoLevel)), log: zap.New(combinedCore),
debug: zap.New(zapcore.NewCore(encoder, zapcore.AddSync(file), zapcore.DebugLevel)), debug: zap.New(debugCore),
debugging: debug, debugging: cfg.Debug,
}, }, nil
nil
} }
func (l *Logger) Info(caller, msg string) { func (l *Logger) Info(caller, msg string) {
@@ -58,8 +88,8 @@ func (l *Logger) Warning(caller, msg string) {
l.log.Warn(msg, zap.String("caller", caller)) l.log.Warn(msg, zap.String("caller", caller))
} }
func (l *Logger) Error(caller, msg string) { func (l *Logger) Error(caller string, msg any) {
l.log.Error(msg, zap.String("caller", caller)) l.log.Error(fmt.Sprint(msg), zap.String("caller", caller))
} }
func (l *Logger) Debug(caller, msg string) { func (l *Logger) Debug(caller, msg string) {

13
main.go
View File

@@ -1,15 +1,20 @@
package main package main
import "github.com/tecamino/tecamino-logger/logging" import (
"errors"
"github.com/tecamino/tecamino-logger/logging"
)
func main() { func main() {
debug := false log, err := logging.NewLogger("Test.log", nil)
log, err := logging.NewLogger("Test", debug)
if err != nil { if err != nil {
panic(err) panic(err)
} }
log.Info("line 10", "hallo") log.Info("line 10", "hallo")
log.Warning("line 11", "vello") log.Warning("line 11", "vello")
log.Error("line 12", "hie") log.Error("line 12", "hie")
log.Debug("line 13", "isch") err = errors.New("test error")
log.Error("line 14", err)
log.Debug("line 15", "isch")
} }