rotatefile

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 3, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Package rotatefile 提供独立于日志模块的按本地小时或天轮转的文件写入器。

直接写入的调用样例:

package main

import (
	"errors"
	"fmt"
	"os"
	"path/filepath"
	"time"

	"github.com/bpcoder16/pixiu/rotatefile"
)

func main() {
	dir, err := os.MkdirTemp("", "pixiu-rotate-example-")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer os.RemoveAll(dir)
	path := filepath.Join(dir, "app.log")
	file, err := rotatefile.New(path,
		rotatefile.OptEvery(time.Hour),
		rotatefile.OptMaxFiles(48),
	)
	if err != nil {
		fmt.Println(err)
		return
	}
	_, writeErr := file.Write([]byte("started\n"))
	if err := errors.Join(writeErr, file.Close()); err != nil {
		fmt.Println(err)
	}
}

New 只接受绝对路径,并建立指向当前时段文件的稳定软链。默认按本地整小时轮转; OptEvery(24*time.Hour) 改为按天轮转。进入新时段后的首次 Write 才会切换文件, 每个本地整点执行一次旧文件清理。调用方使用结束后必须 Close,以等待收尾并停止清理循环。 同一路径只应由一个 Writer 管理。 如需立即同步当前文件,可调用 Sync;旧文件同步、关闭错误及后台清理错误仅输出到 stderr, 不由 Sync/Close 返回。Fd 返回借用的描述符,下一次轮转或关闭可能使其失效。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type File

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

File 直接写入带时段后缀的实际文件;path 是指向当前文件的稳定软链。 Write 在写入前核对时段并按需切换;无写入时不轮转,也不补建空闲时段文件。

func New

func New(path string, opts ...Option) (*File, error)

New 要求绝对路径,打开当前时段的实际文件并建立稳定软链,之后仅在 Write 进入更晚时段时轮转。 空闲或停服期间不补建文件;每小时整点清理,使用结束后必须 Close 停止定时循环。

func (*File) Close

func (r *File) Close() error

Close 停止写入及定时清理,等待后台工作完成,再同步、关闭当前文件。 首次调用只返回当前文件的同步、关闭错误;重复调用返回 os.ErrClosed。 后台错误仅输出到 stderr。

func (*File) Fd

func (r *File) Fd() uintptr

Fd 返回当前底层文件的借用描述符,调用方不得直接关闭。 下一次轮转或 Close 可能使其失效,使用期间应避免并发轮转或关闭。 已完成的 fd 复制或重定向仍绑定原文件,不随软链切换。

func (*File) Sync

func (r *File) Sync() error

Sync 等待旧文件同步、关闭完成,再同步当前文件,不触发轮转或清理。 旧文件同步、关闭错误仅输出到 stderr,不从这里返回;nil 不代表历史文件都同步成功。

func (*File) Write

func (r *File) Write(p []byte) (int, error)

Write 并发安全,进入更晚时段时先切换文件,再写入当前数据。

type Option

type Option func(*config)

Option 定制 New 的行为。

func OptEvery

func OptEvery(d time.Duration) Option

OptEvery 仅接受 time.Hour 或 24*time.Hour,按本地整小时、整天划分时段。 默认每小时;进入更晚时段后的首次 Write 触发轮转,回拨时继续写当前文件。

func OptMaxFiles

func OptMaxFiles(n int) Option

OptMaxFiles 设置当前轮转维度的实际文件数上限(包含当前时段),默认 48,最小为 3。 另一轮转维度的历史文件不计数、不清理。 每小时整点清理完成前,文件数可能暂时超过上限。

Jump to

Keyboard shortcuts

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