1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package querylog
- import (
- "encoding/json"
- "gopkg.in/natefinch/lumberjack.v2"
- )
- type QueryLogger interface {
- Write(*Entry) error
- }
- // easyjson:json
- type Entry struct {
- Time int64
- Hostname string `json:"omitempty"` // not filled in by geodns
- Origin string
- Name string
- Qtype uint16
- Rcode int
- Answers int
- Targets []string
- LabelName string
- RemoteAddr string
- ClientAddr string
- HasECS bool
- // todo:
- // - GeoDNS version
- // - TCP?
- // - log the answer data
- }
- type FileLogger struct {
- logger lumberjack.Logger
- }
- func NewFileLogger(filename string, maxsize int, keep int) (*FileLogger, error) {
- fl := &FileLogger{}
- fl.logger = lumberjack.Logger{
- Filename: filename,
- MaxSize: maxsize, // megabytes
- MaxBackups: keep,
- }
- return fl, nil
- }
- func (l *FileLogger) Write(e *Entry) error {
- js, err := json.Marshal(e)
- if err != nil {
- return err
- }
- js = append(js, []byte("\n")...)
- _, err = l.logger.Write(js)
- return err
- }
|