Documentation ¶
Overview ¶
Package logwriter offers a rich log file writing tools.
There is single 'hot' log file per LogWriter. Usually file name is similar to servicename name and located in /var/log/servicename. All log items goes into 'hot' file.
There are "cold" log files. In accordance to rules specified by Config, logwiter freezes content of 'hot' file by moving content to 'cold' files.
Index ¶
- Constants
- Variables
- type Config
- type LogWriter
- func (lw *LogWriter) Close() error
- func (lw *LogWriter) FlushBuffer() error
- func (lw *LogWriter) FreezeHotFile() error
- func (lw *LogWriter) SetColdNameFormatter(f func(string, string, time.Duration) string)
- func (lw *LogWriter) SetConfig(cfg *Config) error
- func (lw *LogWriter) SetErrorFunc(f func(error))
- func (lw *LogWriter) SetMode(mode RunningMode)
- func (lw *LogWriter) Write(p []byte) (n int, err error)
- type RunningMode
Examples ¶
Constants ¶
const ( KB = 1024 MB = 1024 * 1204 GB = 1024 * 1024 * 1024 )
Size helpers
Variables ¶
var ( // HotFileExtension holds extension for 'hot' log file. HotFileExtension = "log" // ColdFileExtension holds extension for 'cold' log files. ColdFileExtension = "log" // CompressedColdFileExtension holds extension for compressed 'cold' files. CompressedColdFileExtension = "tz" // TraceFileExtension holds extension for trace files. (Not implemented yet) TraceFileExtension = "trc" )
It is allowed to change default values listed above. Change it before calling NewLogWriter(). It's even safe to change if you already have running LogWriter instance.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { // Current running mode Mode RunningMode // Output buffer size. Buffering disabled if value == 0 BufferSize int // Flush buffer to disk every BufferFlushInterval (works if BufferSize > 0) BufferFlushInterval time.Duration // Freeze hot file when size reaches HotMaxSize (value in bytes) HotMaxSize int64 // Freeze hot file every FreezeInterval if value > 0 FreezeInterval time.Duration // Freeze hot file at midnight FreezeAtMidnight bool // Folder where to open/create hot log file HotPath string // Folder where to copy cold file (frozen hot file) ColdPath string // CompressColdFile compresses cold file CompressColdFile bool }
Config holds parameters of LogWriter instance.
type LogWriter ¶
LogWriter wraps io.Writer to automate routine with log files.
func NewLogWriter ¶
func NewLogWriter(uid string, cfg *Config, freezeExisting bool, errHanldler func(error)) (*LogWriter, error)
NewLogWriter creates new LogWriter, opens/creates hot file "%uid%.log". Hot file freezes immediately if freezeExisting is true and non-empty file size > 0.
Example ¶
package main import ( "github.com/regorov/logwriter" "log" "time" ) func main() { cfg := &logwriter.Config{ BufferSize: 2 * logwriter.MB, // write buffering enabled HotPath: "/var/log/example", ColdPath: "/var/log/example/arch", Mode: logwriter.ProductionMode} // write into a file only lw, err := logwriter.NewLogWriter("mywebserver", cfg, true, // freeze log file if it exists nil) if err != nil { panic(err) } l := log.New(lw, "mywebserver ", log.Ldate|log.Ltime|log.Lmicroseconds) l.Println("Mywebserer started at ", time.Now()) if err := lw.Close(); err != nil { panic(err) } }
Output:
func (*LogWriter) Close ¶
Close stops timers, flushes buffers and closes hot file. Please call this function at the end of your program.
func (*LogWriter) FlushBuffer ¶
FlushBuffer flushes buffer if buffering enabled and buffer is not empty
func (*LogWriter) FreezeHotFile ¶
FreezeHotFile freezes hot file. Freeze steps: flush buffer, close file, rename hot file to temporary file in the same folder, rename/move temp file to cold file (async), create new hot file.
func (*LogWriter) SetColdNameFormatter ¶
SetColdNameFormatter replaces default 'cold' file name generator. Default format is "$uid-20060102-150405[.00000].log" implemented by function defaultColdNameFormatter().
func (*LogWriter) SetConfig ¶
SetConfig updates LogWriter config parameters. Func stops timers, flushes buffer, applies new Config, recreate buffer if need, starts timers.
func (*LogWriter) SetErrorFunc ¶
SetErrorFunc assigns callback function to be called when BACKGROUND i/o fails. See running() as instance. logwriter public functions return error withoug calling specified function. Please be carefull, specified user function calls synchronously!
func (*LogWriter) SetMode ¶
func (lw *LogWriter) SetMode(mode RunningMode)
SetMode changes LogWriter running mode. Default value is ProductionMode Default value can be overwritten in NewLogWriter() or changed later by SetMode
type RunningMode ¶
type RunningMode int
RunningMode represents application running mode
const ( // DebugMode orders to write log items into "hot" file and os.Stdout DebugMode RunningMode = 0 // ProductionMode orders to wrire log items to the "hot" file only ProductionMode RunningMode = 1 )
Supported running mode options