1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- // Copyright 2023 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package log
-
- import (
- "io"
-
- "code.gitea.io/gitea/modules/util/rotatingfilewriter"
- )
-
- type WriterFileOption struct {
- FileName string
- MaxSize int64
- LogRotate bool
- DailyRotate bool
- MaxDays int
- Compress bool
- CompressionLevel int
- }
-
- type eventWriterFile struct {
- *EventWriterBaseImpl
- fileWriter io.WriteCloser
- }
-
- var _ EventWriter = (*eventWriterFile)(nil)
-
- func NewEventWriterFile(name string, mode WriterMode) EventWriter {
- w := &eventWriterFile{EventWriterBaseImpl: NewEventWriterBase(name, "file", mode)}
- opt := mode.WriterOption.(WriterFileOption)
- var err error
- w.fileWriter, err = rotatingfilewriter.Open(opt.FileName, &rotatingfilewriter.Options{
- Rotate: opt.LogRotate,
- MaximumSize: opt.MaxSize,
- RotateDaily: opt.DailyRotate,
- KeepDays: opt.MaxDays,
- Compress: opt.Compress,
- CompressionLevel: opt.CompressionLevel,
- })
- if err != nil {
- // if the log file can't be opened, what should it do? panic/exit? ignore logs? fallback to stderr?
- // it seems that "fallback to stderr" is slightly better than others ....
- FallbackErrorf("unable to open log file %q: %v", opt.FileName, err)
- w.fileWriter = nopCloser{Writer: LoggerToWriter(FallbackErrorf)}
- }
- w.OutputWriteCloser = w.fileWriter
- return w
- }
-
- func init() {
- RegisterEventWriter("file", NewEventWriterFile)
- }
|