Skip to content

Commit

Permalink
✨ feat: handler - add new config option RotateMode for rotatefile
Browse files Browse the repository at this point in the history
  • Loading branch information
inhere committed Jun 15, 2023
1 parent 8c4a9a0 commit 85015f1
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 22 deletions.
24 changes: 8 additions & 16 deletions handler/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,11 @@
handler -> buffered -> rotated -> writer(os.File)
```

```plantuml
@startuml
!theme materia
skinparam backgroundColor #fefefc
start
:Handler;
:buffered;
:rotated;
:writer(os.File);
stop
@enduml
```
## Built-in handlers

- `handler.ConsoleHandler` Console handler
- `handler.FileHandler` File handler
- `handler.StreamHandler` Stream handler
- `handler.SyslogHandler` Syslog handler
- `handler.EmailHandler` Email handler
- `handler.FlushCloseHandler` Flush and close handler
9 changes: 9 additions & 0 deletions handler/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ type Config struct {
// RotateTime for rotate file, unit is seconds.
RotateTime rotatefile.RotateTime `json:"rotate_time" yaml:"rotate_time"`

// RotateMode for rotate file by time. default rotatefile.ModeRename
RotateMode rotatefile.RotateMode `json:"rotate_mode" yaml:"rotate_mode"`

// MaxSize on rotate file by size, unit is bytes.
MaxSize uint64 `json:"max_size" yaml:"max_size"`

Expand Down Expand Up @@ -169,6 +172,7 @@ func (c *Config) CreateWriter() (output SyncCloseWriter, err error) {
// copy settings
rc.MaxSize = c.MaxSize
rc.RotateTime = c.RotateTime
rc.RotateMode = c.RotateMode
rc.BackupNum = c.BackupNum
rc.BackupTime = c.BackupTime
rc.Compress = c.Compress
Expand Down Expand Up @@ -261,6 +265,11 @@ func WithRotateTime(rt rotatefile.RotateTime) ConfigFn {
return func(c *Config) { c.RotateTime = rt }
}

// WithRotateMode setting
func WithRotateMode(m rotatefile.RotateMode) ConfigFn {
return func(c *Config) { c.RotateMode = m }
}

// WithBackupNum setting
func WithBackupNum(n uint) ConfigFn {
return func(c *Config) { c.BackupNum = n }
Expand Down
2 changes: 2 additions & 0 deletions handler/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ func TestNewConfig(t *testing.T) {
handler.WithLevelMode(handler.LevelModeValue),
handler.WithBackupNum(20),
handler.WithBackupTime(1800),
handler.WithRotateMode(rotatefile.ModeCreate),
func(c *handler.Config) {
c.BackupTime = 23
},
Expand All @@ -29,6 +30,7 @@ func TestNewConfig(t *testing.T) {
assert.Eq(t, 129, c.BuffSize)
assert.Eq(t, handler.LevelModeValue, c.LevelMode)
assert.Eq(t, slog.ErrorLevel, c.Level)
assert.Eq(t, rotatefile.ModeCreate, c.RotateMode)

c.WithConfigFn(handler.WithLevelNames([]string{"info", "debug"}))
assert.Eq(t, []slog.Level{slog.InfoLevel, slog.DebugLevel}, c.Levels)
Expand Down
4 changes: 2 additions & 2 deletions handler/rotate_file.go → handler/rotatefile.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"github.com/gookit/slog/rotatefile"
)

// MustRotateFile handler instance
// MustRotateFile handler instance, will panic on error
func MustRotateFile(logfile string, rt rotatefile.RotateTime, fns ...ConfigFn) *SyncCloseHandler {
h, err := NewRotateFileHandler(logfile, rt, fns...)
if err != nil {
Expand All @@ -14,7 +14,7 @@ func MustRotateFile(logfile string, rt rotatefile.RotateTime, fns ...ConfigFn) *
return h
}

// NewRotateFile instance
// NewRotateFile instance. alias of NewRotateFileHandler()
func NewRotateFile(logfile string, rt rotatefile.RotateTime, fns ...ConfigFn) (*SyncCloseHandler, error) {
return NewRotateFileHandler(logfile, rt, fns...)
}
Expand Down
5 changes: 1 addition & 4 deletions handler/rotate_file_test.go → handler/rotatefile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ func TestNewRotateFileHandler(t *testing.T) {
logfile := "./testdata/both-rotate-bysize.log"
assert.NoErr(t, fsutil.DeleteIfFileExist(logfile))

h, err := handler.NewRotateFileHandler(logfile, handler.EveryMinute, handler.WithMaxSize(128))

h, err := handler.NewRotateFile(logfile, handler.EveryMinute, handler.WithMaxSize(128))
assert.NoErr(t, err)
assert.True(t, fsutil.IsFile(logfile))

Expand Down Expand Up @@ -77,9 +76,7 @@ func TestNewSizeRotateFileHandler(t *testing.T) {

func TestNewTimeRotateFileHandler_EveryDay(t *testing.T) {
logfile := "./testdata/time-rotate_EveryDay.log"
assert.NoErr(t, fsutil.DeleteIfFileExist(logfile))
newFile := logfile + timex.Now().DateFormat(".Ymd")
assert.NoErr(t, fsutil.DeleteIfFileExist(newFile))

sec := -2
// set current time to today 23:59:57
Expand Down

0 comments on commit 85015f1

Please sign in to comment.