querylog.go 853 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package querylog
  2. import (
  3. "encoding/json"
  4. "gopkg.in/natefinch/lumberjack.v2"
  5. )
  6. type QueryLogger interface {
  7. Write(*Entry) error
  8. }
  9. // easyjson:json
  10. type Entry struct {
  11. Time int64
  12. Origin string
  13. Name string
  14. Qtype uint16
  15. Rcode int
  16. Answers int
  17. Targets []string
  18. LabelName string
  19. RemoteAddr string
  20. ClientAddr string
  21. HasECS bool
  22. }
  23. type FileLogger struct {
  24. logger lumberjack.Logger
  25. }
  26. func NewFileLogger(filename string, maxsize int, keep int) (*FileLogger, error) {
  27. fl := &FileLogger{}
  28. fl.logger = lumberjack.Logger{
  29. Filename: filename,
  30. MaxSize: maxsize, // megabytes
  31. MaxBackups: keep,
  32. }
  33. return fl, nil
  34. }
  35. func (l *FileLogger) Write(e *Entry) error {
  36. js, err := json.Marshal(e)
  37. if err != nil {
  38. return err
  39. }
  40. js = append(js, []byte("\n")...)
  41. _, err = l.logger.Write(js)
  42. return err
  43. }