feat: add precise diagnostics and optional client copy logging controls
This commit is contained in:
@@ -1,13 +1,15 @@
|
||||
package logx
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
|
||||
"git.yuntuo.hk/k2safe/go-omni/internal/configdiag"
|
||||
)
|
||||
|
||||
// RotationConfig opts a file logger into size-based rotation. Zero limits use
|
||||
@@ -21,12 +23,21 @@ type RotationConfig struct {
|
||||
}
|
||||
|
||||
func (r RotationConfig) validate(cfg Config) error {
|
||||
if r.MaxSizeMB < 0 || r.MaxSizeMB > 1024*1024 || r.MaxBackups < 0 || r.MaxBackups > 10000 || r.MaxAgeDays < 0 || r.MaxAgeDays > 36500 {
|
||||
return errors.New("logx: invalid rotation limits")
|
||||
for _, f := range []struct {
|
||||
name string
|
||||
value, max int
|
||||
}{{"maxSizeMb", r.MaxSizeMB, 1024 * 1024}, {"maxBackups", r.MaxBackups, 10000}, {"maxAgeDays", r.MaxAgeDays, 36500}} {
|
||||
if f.value < 0 || f.value > f.max {
|
||||
return configdiag.New("rotation."+f.name, fmt.Sprintf("must be between 0 and %d", f.max))
|
||||
}
|
||||
}
|
||||
if r.Enabled && (cfg.File == "" || cfg.Writer != nil) {
|
||||
return errors.New("logx: rotation requires a file and no custom writer")
|
||||
if r.Enabled && cfg.File == "" {
|
||||
return configdiag.New("file", "is required when rotation is enabled")
|
||||
}
|
||||
if r.Enabled && cfg.Writer != nil {
|
||||
return configdiag.New("rotation.enabled", "cannot be enabled with a custom writer")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user