aboutsummaryrefslogtreecommitdiffstats
path: root/log/logger.go
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-12-29 19:34:14 +0100
committerMartin Polden <mpolden@mpolden.no>2019-12-29 19:34:14 +0100
commit23ce61b1f6ff3b2e6e61162aadf7da6759e9d3df (patch)
treea42579b6c9b2173023f4ddafc9abfe540bde9021 /log/logger.go
parent72ee46698a94c48527184109401e8a6725a4674b (diff)
Move log mode to Logger
Diffstat (limited to 'log/logger.go')
-rw-r--r--log/logger.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/log/logger.go b/log/logger.go
index 7fa4001..1a5b2d0 100644
--- a/log/logger.go
+++ b/log/logger.go
@@ -10,9 +10,19 @@ import (
"github.com/mpolden/zdns/sql"
)
+const (
+ // ModeDiscard disables logging of DNS requests.
+ ModeDiscard = iota
+ // ModeAll logs all DNS requests.
+ ModeAll
+ // ModeHijacked only logs hijacked DNS requests.
+ ModeHijacked
+)
+
// Logger wraps a standard log.Logger and an optional log database.
type Logger struct {
*log.Logger
+ mode int
queue chan Entry
db *sql.Client
wg sync.WaitGroup
@@ -23,6 +33,7 @@ type Logger struct {
// RecordOptions configures recording of DNS requests.
type RecordOptions struct {
Database string
+ Mode int
TTL time.Duration
}
@@ -47,6 +58,7 @@ func newLogger(w io.Writer, prefix string, options RecordOptions, interval time.
Logger: log.New(w, prefix, 0),
queue: make(chan Entry, 100),
now: time.Now,
+ mode: options.Mode,
}
var err error
if options.Database != "" {
@@ -97,6 +109,12 @@ func (l *Logger) Record(remoteAddr net.IP, hijacked bool, qtype uint16, question
if l.db == nil {
return
}
+ if l.mode == ModeDiscard {
+ return
+ }
+ if l.mode == ModeHijacked && !hijacked {
+ return
+ }
l.queue <- Entry{
Time: l.now(),
RemoteAddr: remoteAddr,