gitea
Зеркало из https://github.com/go-gitea/gitea
1// Copyright 2023 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4package log
5
6import (
7"io"
8
9"code.gitea.io/gitea/modules/util/rotatingfilewriter"
10)
11
12type WriterFileOption struct {
13FileName string
14MaxSize int64
15LogRotate bool
16DailyRotate bool
17MaxDays int
18Compress bool
19CompressionLevel int
20}
21
22type eventWriterFile struct {
23*EventWriterBaseImpl
24fileWriter io.WriteCloser
25}
26
27var _ EventWriter = (*eventWriterFile)(nil)
28
29func NewEventWriterFile(name string, mode WriterMode) EventWriter {
30w := &eventWriterFile{EventWriterBaseImpl: NewEventWriterBase(name, "file", mode)}
31opt := mode.WriterOption.(WriterFileOption)
32var err error
33w.fileWriter, err = rotatingfilewriter.Open(opt.FileName, &rotatingfilewriter.Options{
34Rotate: opt.LogRotate,
35MaximumSize: opt.MaxSize,
36RotateDaily: opt.DailyRotate,
37KeepDays: opt.MaxDays,
38Compress: opt.Compress,
39CompressionLevel: opt.CompressionLevel,
40})
41if err != nil {
42// if the log file can't be opened, what should it do? panic/exit? ignore logs? fallback to stderr?
43// it seems that "fallback to stderr" is slightly better than others ....
44FallbackErrorf("unable to open log file %q: %v", opt.FileName, err)
45w.fileWriter = nopCloser{Writer: LoggerToWriter(FallbackErrorf)}
46}
47w.OutputWriteCloser = w.fileWriter
48return w
49}
50
51func init() {
52RegisterEventWriter("file", NewEventWriterFile)
53}
54