rotatefile

package
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 5, 2023 License: MIT Imports: 13 Imported by: 2

README

Rotate File

Usage

Use on another logger
package main

import (
  "log"

  "github.com/dounetio/slog/rotatefile"
)

func main() {
	logFile := "testdata/go_logger.log"
	writer, err := rotatefile.NewConfig(logFile).Create()
	if err != nil {
		panic(err) 
	}

	log.SetOutput(writer)
	log.Println("log message")
}

Documentation

Index

Constants

View Source
const (
	// OneMByte size
	OneMByte uint64 = 1024 * 1024

	// DefaultMaxSize of a log file. default is 20M.
	DefaultMaxSize = 20 * OneMByte
	// DefaultBackNum default backup numbers for old files.
	DefaultBackNum uint = 20
	// DefaultBackTime default backup time for old files. default keep a week.
	DefaultBackTime uint = 24 * 7
)

Variables

View Source
var (
	// DefaultFilePerm perm and flags for create log file
	DefaultFilePerm os.FileMode = 0664
	// DefaultFileFlags for open log file
	DefaultFileFlags = os.O_CREATE | os.O_WRONLY | os.O_APPEND

	// DefaultFilenameFn default new filename func
	DefaultFilenameFn = func(filepath string, rotateNum uint) string {
		suffix := time.Now().Format("010215")

		return filepath + fmt.Sprintf(".%s_%04d", suffix, rotateNum)
	}

	// DefaultTimeClockFn for create time
	DefaultTimeClockFn = ClockFn(func() time.Time {
		return time.Now()
	})
)

Functions

This section is empty.

Types

type CConfig

type CConfig struct {
	// BackupNum max number for keep old files.
	// 0 is not limit, default is 20.
	BackupNum uint `json:"backup_num" yaml:"backup_num"`

	// BackupTime max time for keep old files, unit is hours.
	//
	// 0 is not limit, default is a week.
	BackupTime uint `json:"backup_time" yaml:"backup_time"`

	// Compress determines if the rotated log files should be compressed
	// using gzip. The default is not to perform compression.
	Compress bool `json:"compress" yaml:"compress"`

	// FileDirs list
	FileDirs []string `json:"file_dirs" yaml:"file_dirs"`

	// TimeClock for clean files
	TimeClock Clocker
}

CConfig struct for clean files

func NewCConfig

func NewCConfig() *CConfig

NewCConfig instance

func (*CConfig) AddFileDir

func (c *CConfig) AddFileDir(dirs ...string) *CConfig

AddFileDir for clean

type ClockFn

type ClockFn func() time.Time

ClockFn func

func (ClockFn) Now

func (fn ClockFn) Now() time.Time

Now implements the Clocker

type Clocker

type Clocker interface {
	Now() time.Time
}

Clocker is the interface used for determine the current time

type Config

type Config struct {
	// Filepath the log file path, will be rotating
	Filepath string `json:"filepath" yaml:"filepath"`

	// MaxSize file contents max size, unit is bytes.
	// If is equals zero, disable rotate file by size
	//
	// default see DefaultMaxSize
	MaxSize uint64 `json:"max_size" yaml:"max_size"`

	// RotateTime the file rotate interval time, unit is seconds.
	// If is equals zero, disable rotate file by time
	//
	// default see EveryHour
	RotateTime RotateTime `json:"rotate_time" yaml:"rotate_time"`

	// CloseLock use sync lock on write contents, rotating file.
	//
	// default: false
	CloseLock bool `json:"close_lock" yaml:"close_lock"`

	// BackupNum max number for keep old files.
	//
	// 0 is not limit, default is DefaultBackNum
	BackupNum uint `json:"backup_num" yaml:"backup_num"`

	// BackupTime max time for keep old files, unit is hours.
	//
	// 0 is not limit, default is DefaultBackTime
	BackupTime uint `json:"backup_time" yaml:"backup_time"`

	// Compress determines if the rotated log files should be compressed using gzip.
	// The default is not to perform compression.
	Compress bool `json:"compress" yaml:"compress"`

	// RenameFunc you can custom-build filename for rotate file by size.
	//
	// default see DefaultFilenameFn
	RenameFunc func(filePath string, rotateNum uint) string

	// TimeClock for rotate
	TimeClock Clocker
}

Config struct for rotate dispatcher

func EmptyConfigWith

func EmptyConfigWith(fns ...ConfigFn) *Config

EmptyConfigWith new empty config with custom func

func NewConfig

func NewConfig(filePath string) *Config

NewConfig by file path

func NewConfigWith

func NewConfigWith(fns ...ConfigFn) *Config

NewConfigWith custom func

func NewDefaultConfig

func NewDefaultConfig() *Config

NewDefaultConfig instance

func (*Config) Create

func (c *Config) Create() (*Writer, error)

Create new Writer by config

func (*Config) With

func (c *Config) With(fns ...ConfigFn) *Config

With more config setting func

type ConfigFn

type ConfigFn func(c *Config)

ConfigFn for setting config

func WithFilepath

func WithFilepath(logfile string) ConfigFn

WithFilepath setting

type FilesClear

type FilesClear struct {
	// contains filtered or unexported fields
}

FilesClear multi files by time. TODO use for rotate and clear other program produce log files

func NewFilesClear

func NewFilesClear(cfg *CConfig) *FilesClear

NewFilesClear instance

func (*FilesClear) Clean

func (r *FilesClear) Clean() (err error)

Clean old files by config

func (*FilesClear) CleanDaemon

func (r *FilesClear) CleanDaemon()

CleanDaemon daemon clean old files by config

func (*FilesClear) WithConfigFn

func (r *FilesClear) WithConfigFn(fn func(c *CConfig)) *FilesClear

WithConfigFn for custom settings

type RotateTime

type RotateTime int

RotateTime for rotate file. unit is seconds.

EveryDay:

  • "error.log.20201223"

EveryHour, Every30Min, EveryMinute:

  • "error.log.20201223_1500"
  • "error.log.20201223_1530"
  • "error.log.20201223_1523"
const (
	EveryDay    RotateTime = timex.OneDaySec
	EveryHour   RotateTime = timex.OneHourSec
	Every30Min  RotateTime = 30 * timex.OneMinSec
	Every15Min  RotateTime = 15 * timex.OneMinSec
	EveryMinute RotateTime = timex.OneMinSec
	EverySecond RotateTime = 1 // only use for tests
)

built in rotate time consts

func (RotateTime) FirstCheckTime

func (rt RotateTime) FirstCheckTime(now time.Time) int64

FirstCheckTime for rotate file. will automatically align the time from the start of each hour.

func (RotateTime) Interval

func (rt RotateTime) Interval() int64

Interval get check interval time

func (RotateTime) String

func (rt RotateTime) String() string

String rotate type to string

func (RotateTime) TimeFormat

func (rt RotateTime) TimeFormat() (suffixFormat string)

TimeFormat get log file suffix format

EveryDay:

  • "error.log.20201223"

EveryHour, Every30Min, EveryMinute:

  • "error.log.20201223_1500"
  • "error.log.20201223_1530"
  • "error.log.20201223_1523"

type RotateWriter

type RotateWriter interface {
	io.WriteCloser
	Clean() error
	Flush() error
	Rotate() error
	Sync() error
}

RotateWriter interface

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

Writer a flush, close, writer and support rotate file.

refer https://github.com/flike/golog/blob/master/filehandler.go

func NewWriter

func NewWriter(c *Config) (*Writer, error)

NewWriter create rotate dispatcher with config.

func NewWriterWith

func NewWriterWith(fns ...ConfigFn) (*Writer, error)

NewWriterWith create rotate writer with some settings.

func (*Writer) Clean

func (d *Writer) Clean() (err error)

Clean old files by config

func (*Writer) Close

func (d *Writer) Close() error

Close the writer. will sync data to disk, then close the file handle

func (*Writer) Config

func (d *Writer) Config() Config

Config get the config

func (*Writer) Flush

func (d *Writer) Flush() error

Flush sync data to disk. alias of Sync()

func (*Writer) ReopenFile

func (d *Writer) ReopenFile() error

ReopenFile the log file

func (*Writer) Rotate

func (d *Writer) Rotate() (err error)

Rotate the file by config.

func (*Writer) Sync

func (d *Writer) Sync() error

Sync data to disk.

func (*Writer) Write

func (d *Writer) Write(p []byte) (n int, err error)

Write data to file. then check and do rotate file.

func (*Writer) WriteString

func (d *Writer) WriteString(s string) (n int, err error)

WriteString implements the io.StringWriter

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL