code.gitea.io/gitea@v1.22.3/modules/log/event_writer_file.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package log 5 6 import ( 7 "io" 8 9 "code.gitea.io/gitea/modules/util/rotatingfilewriter" 10 ) 11 12 type WriterFileOption struct { 13 FileName string 14 MaxSize int64 15 LogRotate bool 16 DailyRotate bool 17 MaxDays int 18 Compress bool 19 CompressionLevel int 20 } 21 22 type eventWriterFile struct { 23 *EventWriterBaseImpl 24 fileWriter io.WriteCloser 25 } 26 27 var _ EventWriter = (*eventWriterFile)(nil) 28 29 func NewEventWriterFile(name string, mode WriterMode) EventWriter { 30 w := &eventWriterFile{EventWriterBaseImpl: NewEventWriterBase(name, "file", mode)} 31 opt := mode.WriterOption.(WriterFileOption) 32 var err error 33 w.fileWriter, err = rotatingfilewriter.Open(opt.FileName, &rotatingfilewriter.Options{ 34 Rotate: opt.LogRotate, 35 MaximumSize: opt.MaxSize, 36 RotateDaily: opt.DailyRotate, 37 KeepDays: opt.MaxDays, 38 Compress: opt.Compress, 39 CompressionLevel: opt.CompressionLevel, 40 }) 41 if 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 .... 44 FallbackErrorf("unable to open log file %q: %v", opt.FileName, err) 45 w.fileWriter = nopCloser{Writer: LoggerToWriter(FallbackErrorf)} 46 } 47 w.OutputWriteCloser = w.fileWriter 48 return w 49 } 50 51 func init() { 52 RegisterEventWriter("file", NewEventWriterFile) 53 }