gitea源码

event_writer_file.go 1.5KB

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