You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

event_writer_file.go 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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/rotatingfilewriter"
  7. )
  8. type WriterFileOption struct {
  9. FileName string
  10. MaxSize int64
  11. LogRotate bool
  12. DailyRotate bool
  13. MaxDays int
  14. Compress bool
  15. CompressionLevel int
  16. }
  17. type eventWriterFile struct {
  18. *EventWriterBaseImpl
  19. fileWriter io.WriteCloser
  20. }
  21. var _ EventWriter = (*eventWriterFile)(nil)
  22. func NewEventWriterFile(name string, mode WriterMode) EventWriter {
  23. w := &eventWriterFile{EventWriterBaseImpl: NewEventWriterBase(name, "file", mode)}
  24. opt := mode.WriterOption.(WriterFileOption)
  25. var err error
  26. w.fileWriter, err = rotatingfilewriter.Open(opt.FileName, &rotatingfilewriter.Options{
  27. Rotate: opt.LogRotate,
  28. MaximumSize: opt.MaxSize,
  29. RotateDaily: opt.DailyRotate,
  30. KeepDays: opt.MaxDays,
  31. Compress: opt.Compress,
  32. CompressionLevel: opt.CompressionLevel,
  33. })
  34. if err != nil {
  35. // if the log file can't be opened, what should it do? panic/exit? ignore logs? fallback to stderr?
  36. // it seems that "fallback to stderr" is slightly better than others ....
  37. FallbackErrorf("unable to open log file %q: %v", opt.FileName, err)
  38. w.fileWriter = nopCloser{Writer: LoggerToWriter(FallbackErrorf)}
  39. }
  40. w.OutputWriteCloser = w.fileWriter
  41. return w
  42. }
  43. func init() {
  44. RegisterEventWriter("file", NewEventWriterFile)
  45. }