Explorar o código

Logger: add prefix to log lines

This is useful to automatically provide context about what component of
the framework is emitting a log line.

Example output:
```
$ go build && sudo ./coredhcp
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "dns"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "file"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "netmask"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "range"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "router"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "server_id"
[2019-08-25T21:39:26+01:00]  INFO config: Loading configuration
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `server_id` with 1 args: [10.10.10.1]
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `dns` with 2 args: [8.8.8.8 8.8.4.4]
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `router` with 1 args: [10.10.10.1]
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `netmask` with 1 args: [255.255.255.0]
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `range` with 4 args: [leases.txt 10.10.10.100 10.10.10.200 60s]
[2019-08-25T21:39:26+01:00]  INFO coredhcp: Loading plugins...
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `server_id`
[2019-08-25T21:39:26+01:00]  INFO plugins/server_id: plugins/server_id: loading `server_id` plugin for DHCPv4
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `dns`
[2019-08-25T21:39:26+01:00]  INFO plugins/dns: loaded plugin for DHCPv4.
[2019-08-25T21:39:26+01:00]  INFO plugins/dns: loaded 2 DNS servers.
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `router`
[2019-08-25T21:39:26+01:00]  INFO plugins/router: plugins/router: loaded plugin for DHCPv4.
[2019-08-25T21:39:26+01:00]  INFO plugins/router: plugins/router: loaded 1 router IP addresses.
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `netmask`
[2019-08-25T21:39:26+01:00]  INFO plugins/netmask: plugins/netmask: loaded plugin for DHCPv4.
[2019-08-25T21:39:26+01:00]  INFO plugins/netmask: plugins/netmask: loaded client netmask
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `range`
[2019-08-25T21:39:26+01:00]  INFO plugins/range: plugins/range: reading leases from leases.txt
[2019-08-25T21:39:26+01:00]  INFO plugins/range: plugins/range: loaded 1 leases from leases.txt
[2019-08-25T21:39:26+01:00]  INFO coredhcp: Starting DHCPv4 listener on 0.0.0.0:67
[2019-08-25T21:39:26+01:00]  INFO coredhcp: Waiting
```

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
Andrea Barberio %!s(int64=6) %!d(string=hai) anos
pai
achega
b9d7c74d44

+ 1 - 1
cmds/client/main.go

@@ -14,7 +14,7 @@ import (
 	"github.com/insomniacslk/dhcp/iana"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("main")
 
 func main() {
 	flag.Parse()

+ 1 - 1
cmds/coredhcp/main.go

@@ -15,7 +15,7 @@ import (
 )
 
 func main() {
-	logger := logger.GetLogger()
+	logger := logger.GetLogger("main")
 	config, err := config.Load()
 	if err != nil {
 		logger.Fatal(err)

+ 1 - 1
config/config.go

@@ -13,7 +13,7 @@ import (
 	"github.com/spf13/viper"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("config")
 
 type protocolVersion int
 

+ 1 - 1
coredhcp.go

@@ -15,7 +15,7 @@ import (
 	"github.com/insomniacslk/dhcp/dhcpv6/server6"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("coredhcp")
 
 // Server is a CoreDHCP server structure that holds information about
 // DHCPv6 and DHCPv4 servers, and their respective handlers.

+ 6 - 0
go.mod

@@ -3,12 +3,18 @@ module github.com/coredhcp/coredhcp
 go 1.12
 
 require (
+	github.com/chappjc/logrus-prefix v0.0.0-20180227015900-3a1d64819adb
 	github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 // indirect
 	github.com/insomniacslk/dhcp v0.0.0-20190814082028-393ae75a101b
+	github.com/mattn/go-colorable v0.1.2 // indirect
 	github.com/mdlayher/ethernet v0.0.0-20190606142754-0394541c37b7 // indirect
 	github.com/mdlayher/raw v0.0.0-20190606144222-a54781e5f38f // indirect
+	github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
+	github.com/onsi/ginkgo v1.9.0 // indirect
+	github.com/onsi/gomega v1.6.0 // indirect
 	github.com/sirupsen/logrus v1.4.2
 	github.com/spf13/cast v1.3.0
 	github.com/spf13/viper v1.4.0
 	github.com/u-root/u-root v5.0.0+incompatible // indirect
+	github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect
 )

+ 25 - 0
go.sum

@@ -8,6 +8,8 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/chappjc/logrus-prefix v0.0.0-20180227015900-3a1d64819adb h1:aZTKxMminKeQWHtzJBbV8TttfTxzdJ+7iEJFE6FmUzg=
+github.com/chappjc/logrus-prefix v0.0.0-20180227015900-3a1d64819adb/go.mod h1:xzXc1S/L+64uglB3pw54o8kqyM6KFYpTeC9Q6+qZIu8=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
@@ -42,6 +44,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 h1:/jC7qQFrv8CrSJVmaolDVOxTfS9kc36uB6H40kdbQq8=
 github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714/go.mod h1:2Goc3h8EklBH5mspfHFxBnEoURQCGzQQH1ga9Myjvis=
 github.com/insomniacslk/dhcp v0.0.0-20190729073401-393ae75 h1:6ml59HeoqwyEPJmBNSKksodppW/+A2zADk0Znv7WXQs=
@@ -64,16 +68,27 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
 github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
+github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/mdlayher/ethernet v0.0.0-20190606142754-0394541c37b7 h1:lez6TS6aAau+8wXUP3G9I3TGlmPFEq2CTxBaRqY6AGE=
 github.com/mdlayher/ethernet v0.0.0-20190606142754-0394541c37b7/go.mod h1:U6ZQobyTjI/tJyq2HG+i/dfSoFUt8/aZCM+GKtmFk/Y=
 github.com/mdlayher/raw v0.0.0-20190606142536-fef19f00fc18/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
 github.com/mdlayher/raw v0.0.0-20190606144222-a54781e5f38f h1:Xjvm7UTnKTwrlhbs+8qA6I0v1iX77rY3QxftSgvOVRk=
 github.com/mdlayher/raw v0.0.0-20190606144222-a54781e5f38f/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
+github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
+github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
 github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.9.0 h1:SZjF721BByVj8QH636/8S2DnX4n0Re3SteMmw3N+tzc=
+github.com/onsi/ginkgo v1.9.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.6.0 h1:8XTW0fcJZEq9q+Upcyws4JSGua2MFysCL5xkaSgHc+M=
+github.com/onsi/gomega v1.6.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -112,6 +127,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1
 github.com/u-root/u-root v5.0.0+incompatible h1:hObldH1pHaXZXVeQnE7I0B23+HXDsGuX1rYQtKKRMhA=
 github.com/u-root/u-root v5.0.0+incompatible/go.mod h1:RYkpo8pTHrNjW08opNd/U6p/RJE7K0D8fXO0d47+3YY=
 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJzfthRT6usrui8uGmg=
+github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
@@ -119,10 +136,12 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -137,9 +156,11 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190418153312-f0ce4c0180be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -159,7 +180,11 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=

+ 7 - 3
logger/logger.go

@@ -3,6 +3,7 @@ package logger
 import (
 	"sync"
 
+	log_prefixed "github.com/chappjc/logrus-prefix"
 	"github.com/sirupsen/logrus"
 )
 
@@ -12,15 +13,18 @@ var (
 )
 
 // GetLogger returns a configured logger instance
-func GetLogger() *logrus.Logger {
+func GetLogger(prefix string) *logrus.Entry {
+	if prefix == "" {
+		prefix = "<no prefix>"
+	}
 	if globalLogger == nil {
 		getLoggerMutex.Lock()
 		defer getLoggerMutex.Unlock()
 		logger := logrus.New()
-		logger.SetFormatter(&logrus.TextFormatter{
+		logger.SetFormatter(&log_prefixed.TextFormatter{
 			FullTimestamp: true,
 		})
 		globalLogger = logger
 	}
-	return globalLogger
+	return globalLogger.WithField("prefix", prefix)
 }

+ 4 - 4
plugins/dns/plugin.go

@@ -11,7 +11,7 @@ import (
 	"github.com/insomniacslk/dhcp/dhcpv6"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("plugins/dns")
 
 func init() {
 	plugins.RegisterPlugin("dns", setupDNS6, setupDNS4)
@@ -23,12 +23,12 @@ var (
 
 func setupDNS6(args ...string) (handler.Handler6, error) {
 	// TODO setup function for IPv6
-	log.Warning("plugins/dns: not implemented for IPv6")
+	log.Warning("not implemented for IPv6")
 	return Handler6, nil
 }
 
 func setupDNS4(args ...string) (handler.Handler4, error) {
-	log.Printf("plugins/dns: loaded plugin for DHCPv4.")
+	log.Printf("loaded plugin for DHCPv4.")
 	if len(args) < 1 {
 		return nil, errors.New("need at least one DNS server")
 	}
@@ -39,7 +39,7 @@ func setupDNS4(args ...string) (handler.Handler4, error) {
 		}
 		dnsServers = append(dnsServers, DNSServer)
 	}
-	log.Infof("plugins/dns: loaded %d DNS servers.", len(dnsServers))
+	log.Infof("loaded %d DNS servers.", len(dnsServers))
 	return Handler4, nil
 }
 

+ 5 - 5
plugins/example/plugin.go

@@ -17,7 +17,7 @@ import (
 // `logger.GetLogger()` to get a singleton instance of the logger. Then just use
 // it with the `logrus` interface (https://github.com/sirupsen/logrus). More
 // information in the docstring of the logger package.
-var log = logger.GetLogger()
+var log = logger.GetLogger("plugins/example")
 
 // In the main package, you need to register your plugin at import time. To do
 // this, just do a blank import of this package, e.g.
@@ -56,14 +56,14 @@ func init() {
 // packet that the server receives. Remember that a handler may not be called
 // for each packet, if the handler chain is interrupted before reaching it.
 func setupExample6(args ...string) (handler.Handler6, error) {
-	log.Printf("plugins/example: loaded plugin for DHCPv6.")
+	log.Printf("loaded plugin for DHCPv6.")
 	return exampleHandler6, nil
 }
 
 // setupExample4 behaves like setupExample6, but for DHCPv4 packets. It
 // implements the `plugin.SetupFunc4` interface.
 func setupExample4(args ...string) (handler.Handler4, error) {
-	log.Printf("plugins/example: loaded plugin for DHCPv4.")
+	log.Printf("loaded plugin for DHCPv4.")
 	return exampleHandler4, nil
 }
 
@@ -81,7 +81,7 @@ func setupExample4(args ...string) (handler.Handler4, error) {
 // will call the next plugin in the chan, using the returned response packet as
 // input for the next plugin.
 func exampleHandler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
-	log.Printf("plugins/example: received DHCPv6 packet: %s", req.Summary())
+	log.Printf("received DHCPv6 packet: %s", req.Summary())
 	// return the unmodified response, and false. This means that the next
 	// plugin in the chain will be called, and the unmodified response packet
 	// will be used as its input.
@@ -91,7 +91,7 @@ func exampleHandler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
 // exampleHandler4 behaves like exampleHandler6, but for DHCPv4 packets. It
 // implements the `handler.Handler4` interface.
 func exampleHandler4(req, resp *dhcpv4.DHCPv4) (*dhcpv4.DHCPv4, bool) {
-	log.Printf("plugins/example: received DHCPv4 packet: %s", req.Summary())
+	log.Printf("received DHCPv4 packet: %s", req.Summary())
 	// return the unmodified response, and false. This means that the next
 	// plugin in the chain will be called, and the unmodified response packet
 	// will be used as its input.

+ 14 - 14
plugins/file/plugin.go

@@ -15,7 +15,7 @@ import (
 	"github.com/insomniacslk/dhcp/dhcpv6"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("plugins/file")
 
 func init() {
 	plugins.RegisterPlugin("file", setupFile6, setupFile4)
@@ -35,7 +35,7 @@ var (
 // the specified file. The records have to be one per line, a mac address and an
 // IPv4 address.
 func LoadDHCPv4Records(filename string) (map[string]net.IP, error) {
-	log.Printf("plugins/file: reading leases from %s", filename)
+	log.Printf("reading leases from %s", filename)
 	data, err := ioutil.ReadFile(filename)
 	if err != nil {
 		return nil, err
@@ -68,7 +68,7 @@ func LoadDHCPv4Records(filename string) (map[string]net.IP, error) {
 // the specified file. The records have to be one per line, a mac address and an
 // IPv6 address.
 func LoadDHCPv6Records(filename string) (map[string]net.IP, error) {
-	log.Printf("plugins/file: reading leases from %s", filename)
+	log.Printf("reading leases from %s", filename)
 	data, err := ioutil.ReadFile(filename)
 	if err != nil {
 		return nil, err
@@ -82,15 +82,15 @@ func LoadDHCPv6Records(filename string) (map[string]net.IP, error) {
 		}
 		tokens := strings.Fields(line)
 		if len(tokens) != 2 {
-			return nil, fmt.Errorf("plugins/file: malformed line: %s", line)
+			return nil, fmt.Errorf("malformed line: %s", line)
 		}
 		hwaddr, err := net.ParseMAC(tokens[0])
 		if err != nil {
-			return nil, fmt.Errorf("plugins/file: malformed hardware address: %s", tokens[0])
+			return nil, fmt.Errorf("malformed hardware address: %s", tokens[0])
 		}
 		ipaddr := net.ParseIP(tokens[1])
 		if ipaddr.To16() == nil {
-			return nil, fmt.Errorf("plugins/file: expected an IPv6 address, got: %v", ipaddr)
+			return nil, fmt.Errorf("expected an IPv6 address, got: %v", ipaddr)
 		}
 		records[hwaddr.String()] = ipaddr
 	}
@@ -103,14 +103,14 @@ func Handler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
 	if err != nil {
 		return nil, false
 	}
-	log.Printf("plugins/file: looking up an IP address for MAC %s", mac.String())
+	log.Printf("looking up an IP address for MAC %s", mac.String())
 
 	ipaddr, ok := StaticRecords[mac.String()]
 	if !ok {
-		log.Warningf("plugins/file: MAC address %s is unknown", mac.String())
+		log.Warningf("MAC address %s is unknown", mac.String())
 		return nil, false
 	}
-	log.Printf("plugins/file: found IP address %s for MAC %s", ipaddr, mac.String())
+	log.Printf("found IP address %s for MAC %s", ipaddr, mac.String())
 	resp.AddOption(&dhcpv6.OptIANA{
 		// FIXME copy this field from the client, reject/drop if missing
 		IaId: [4]byte{0xaa, 0xbb, 0xcc, 0xdd},
@@ -148,11 +148,11 @@ func Handler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
 func Handler4(req, resp *dhcpv4.DHCPv4) (*dhcpv4.DHCPv4, bool) {
 	ipaddr, ok := StaticRecords[req.ClientHWAddr.String()]
 	if !ok {
-		log.Warningf("plugins/file: MAC address %s is unknown", req.ClientHWAddr.String())
+		log.Warningf("MAC address %s is unknown", req.ClientHWAddr.String())
 		return resp, false
 	}
 	resp.YourIPAddr = ipaddr
-	log.Printf("plugins/file: found IP address %s for MAC %s", ipaddr, req.ClientHWAddr.String())
+	log.Printf("found IP address %s for MAC %s", ipaddr, req.ClientHWAddr.String())
 	return resp, true
 }
 
@@ -170,11 +170,11 @@ func setupFile(v6 bool, args ...string) (handler.Handler6, handler.Handler4, err
 	var err error
 	var records map[string]net.IP
 	if len(args) < 1 {
-		return nil, nil, errors.New("plugins/file: need a file name")
+		return nil, nil, errors.New("need a file name")
 	}
 	filename := args[0]
 	if filename == "" {
-		return nil, nil, errors.New("plugins/file: got empty file name")
+		return nil, nil, errors.New("got empty file name")
 	}
 	if v6 {
 		records, err = LoadDHCPv6Records(filename)
@@ -185,6 +185,6 @@ func setupFile(v6 bool, args ...string) (handler.Handler6, handler.Handler4, err
 		return nil, nil, fmt.Errorf("failed to load DHCPv6 records: %v", err)
 	}
 	StaticRecords = records
-	log.Printf("plugins/file: loaded %d leases from %s", len(records), filename)
+	log.Printf("loaded %d leases from %s", len(records), filename)
 	return Handler6, Handler4, nil
 }

+ 4 - 4
plugins/netmask/plugin.go

@@ -12,7 +12,7 @@ import (
 	"github.com/insomniacslk/dhcp/dhcpv6"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("plugins/netmask")
 
 func init() {
 	plugins.RegisterPlugin("netmask", setupNetmask6, setupNetmask4)
@@ -24,12 +24,12 @@ var (
 
 func setupNetmask6(args ...string) (handler.Handler6, error) {
 	// TODO setup function for IPv6
-	log.Warning("plugins/netmask: not implemented for IPv6")
+	log.Warning("not implemented for IPv6")
 	return Handler6, nil
 }
 
 func setupNetmask4(args ...string) (handler.Handler4, error) {
-	log.Printf("plugins/netmask: loaded plugin for DHCPv4.")
+	log.Printf("loaded plugin for DHCPv4.")
 	if len(args) != 1 {
 		return nil, errors.New("need at least one netmask IP address")
 	}
@@ -45,7 +45,7 @@ func setupNetmask4(args ...string) (handler.Handler4, error) {
 	if !checkValidNetmask(netmask) {
 		return nil, errors.New("netmask is not valid, got: " + args[1])
 	}
-	log.Printf("plugins/netmask: loaded client netmask")
+	log.Printf("loaded client netmask")
 	return Handler4, nil
 }
 

+ 1 - 1
plugins/plugin.go

@@ -5,7 +5,7 @@ import (
 	"github.com/coredhcp/coredhcp/logger"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("plugins")
 
 // Plugin represents a plugin object.
 // Setup6 and Setup4 are the setup functions for DHCPv6 and DHCPv4 handlers

+ 7 - 7
plugins/range/plugin.go

@@ -19,7 +19,7 @@ import (
 	"github.com/insomniacslk/dhcp/dhcpv6"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("plugins/range")
 
 func init() {
 	plugins.RegisterPlugin("range", setupRange6, setupRange4)
@@ -58,7 +58,7 @@ func LoadDHCPv6Records(filename string) (map[string]*Record, error) {
 // the specified file. The records have to be one per line, a mac address and an
 // IPv4 address.
 func LoadDHCPv4Records(filename string) (map[string]*Record, error) {
-	log.Printf("plugins/range: reading leases from %s", filename)
+	log.Printf("reading leases from %s", filename)
 	data, err := ioutil.ReadFile(filename)
 	if err != nil {
 		return nil, err
@@ -100,7 +100,7 @@ func Handler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
 func Handler4(req, resp *dhcpv4.DHCPv4) (*dhcpv4.DHCPv4, bool) {
 	record, ok := Records[req.ClientHWAddr.String()]
 	if !ok {
-		log.Printf("plugins/range: MAC address %s is new, leasing new IP address", req.ClientHWAddr.String())
+		log.Printf("MAC address %s is new, leasing new IP address", req.ClientHWAddr.String())
 		rec, err := createIP(ipRangeStart, ipRangeEnd)
 		if err != nil {
 			log.Error(err)
@@ -108,20 +108,20 @@ func Handler4(req, resp *dhcpv4.DHCPv4) (*dhcpv4.DHCPv4, bool) {
 		}
 		err = saveIPAddress(req.ClientHWAddr, rec)
 		if err != nil {
-			log.Printf("plugins/range: SaveIPAddress failed: %v", err)
+			log.Printf("SaveIPAddress failed: %v", err)
 		}
 		Records[req.ClientHWAddr.String()] = rec
 		record = rec
 	}
 	resp.YourIPAddr = record.IP
 	resp.Options.Update(dhcpv4.OptIPAddressLeaseTime(LeaseTime))
-	log.Printf("plugins/range: found IP address %s for MAC %s", record.IP, req.ClientHWAddr.String())
+	log.Printf("found IP address %s for MAC %s", record.IP, req.ClientHWAddr.String())
 	return resp, false
 }
 
 func setupRange6(args ...string) (handler.Handler6, error) {
 	// TODO setup function for IPv6
-	log.Warning("plugins/range: not implemented for IPv6")
+	log.Warning("not implemented for IPv6")
 	return Handler6, nil
 }
 
@@ -164,7 +164,7 @@ func setupRange(v6 bool, args ...string) (handler.Handler6, handler.Handler4, er
 	}
 	rand.Seed(time.Now().Unix())
 
-	log.Printf("plugins/range: loaded %d leases from %s", len(Records), filename)
+	log.Printf("loaded %d leases from %s", len(Records), filename)
 
 	return Handler6, Handler4, nil
 }

+ 4 - 4
plugins/router/plugin.go

@@ -11,7 +11,7 @@ import (
 	"github.com/insomniacslk/dhcp/dhcpv6"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("plugins/router")
 
 func init() {
 	plugins.RegisterPlugin("router", setupRouter6, setupRouter4)
@@ -23,12 +23,12 @@ var (
 
 func setupRouter6(args ...string) (handler.Handler6, error) {
 	// TODO setup function for IPv6
-	log.Warning("plugins/router: not implemented for IPv6")
+	log.Warning("not implemented for IPv6")
 	return Handler6, nil
 }
 
 func setupRouter4(args ...string) (handler.Handler4, error) {
-	log.Printf("plugins/router: loaded plugin for DHCPv4.")
+	log.Printf("loaded plugin for DHCPv4.")
 	if len(args) < 1 {
 		return nil, errors.New("need at least one router IP address")
 	}
@@ -39,7 +39,7 @@ func setupRouter4(args ...string) (handler.Handler4, error) {
 		}
 		routers = append(routers, router)
 	}
-	log.Infof("plugins/router: loaded %d router IP addresses.", len(routers))
+	log.Infof("loaded %d router IP addresses.", len(routers))
 	return Handler4, nil
 }
 

+ 13 - 13
plugins/server_id/plugin.go

@@ -13,7 +13,7 @@ import (
 	"github.com/insomniacslk/dhcp/iana"
 )
 
-var log = logger.GetLogger()
+var log = logger.GetLogger("plugins/server_id")
 
 func init() {
 	plugins.RegisterPlugin("server_id", setupServerID6, setupServerID4)
@@ -33,7 +33,7 @@ func Handler6(req, resp dhcpv6.DHCPv6) (dhcpv6.DHCPv6, bool) {
 	if opt := req.GetOneOption(dhcpv6.OptionServerID); opt != nil {
 		sid := opt.(*dhcpv6.OptServerId)
 		if !sid.Sid.Equal(*V6ServerID) {
-			log.Infof("plugins/server_id: requested server ID does not match this server's ID. Got %v, want %v", sid.Sid, V6ServerID)
+			log.Infof("requested server ID does not match this server's ID. Got %v, want %v", sid.Sid, V6ServerID)
 		}
 	}
 	dhcpv6.WithServerID(*V6ServerID)(resp)
@@ -46,14 +46,14 @@ func Handler4(req, resp *dhcpv4.DHCPv4) (*dhcpv4.DHCPv4, bool) {
 		return resp, false
 	}
 	if req.OpCode != dhcpv4.OpcodeBootRequest {
-		log.Warningf("plugins/server_id: not a BootRequest, ignoring")
+		log.Warningf("not a BootRequest, ignoring")
 		return resp, false
 	}
 	if req.ServerIPAddr != nil &&
 		!req.ServerIPAddr.Equal(net.IPv4zero) &&
 		!req.ServerIPAddr.Equal(V4ServerID) {
 		// This request is not for us, drop it.
-		log.Infof("plugins/server_id: requested server ID does not match this server's ID. Got %v, want %v", req.ServerIPAddr, V4ServerID)
+		log.Infof("requested server ID does not match this server's ID. Got %v, want %v", req.ServerIPAddr, V4ServerID)
 		return nil, true
 	}
 	resp.ServerIPAddr = make(net.IP, net.IPv4len)
@@ -63,33 +63,33 @@ func Handler4(req, resp *dhcpv4.DHCPv4) (*dhcpv4.DHCPv4, bool) {
 }
 
 func setupServerID4(args ...string) (handler.Handler4, error) {
-	log.Print("plugins/server_id: loading `server_id` plugin for DHCPv4")
+	log.Print("loading `server_id` plugin for DHCPv4")
 	if len(args) < 1 {
-		return nil, errors.New("plugins/server_id: need an argument")
+		return nil, errors.New("need an argument")
 	}
 	serverID := net.ParseIP(args[0])
 	if serverID == nil {
-		return nil, errors.New("plugins/server_id: invalid or empty IP address")
+		return nil, errors.New("invalid or empty IP address")
 	}
 	if serverID.To4() == nil {
-		return nil, errors.New("plugins/server_id: not a valid IPv4 address")
+		return nil, errors.New("not a valid IPv4 address")
 	}
 	V4ServerID = serverID
 	return Handler4, nil
 }
 
 func setupServerID6(args ...string) (handler.Handler6, error) {
-	log.Print("plugins/server_id: loading `server_id` plugin for DHCPv6")
+	log.Print("loading `server_id` plugin for DHCPv6")
 	if len(args) < 2 {
-		return nil, errors.New("plugins/server_id: need a DUID type and value")
+		return nil, errors.New("need a DUID type and value")
 	}
 	duidType := args[0]
 	if duidType == "" {
-		return nil, errors.New("plugins/server_id: got empty DUID type")
+		return nil, errors.New("got empty DUID type")
 	}
 	duidValue := args[1]
 	if duidValue == "" {
-		return nil, errors.New("plugins/server_id: got empty DUID value")
+		return nil, errors.New("got empty DUID value")
 	}
 	duidType = strings.ToLower(duidType)
 	hwaddr, err := net.ParseMAC(duidValue)
@@ -118,7 +118,7 @@ func setupServerID6(args ...string) (handler.Handler6, error) {
 	default:
 		return nil, errors.New("Opaque DUID type not supported yet")
 	}
-	log.Printf("plugins/server_id: using %s %s", duidType, duidValue)
+	log.Printf("using %s %s", duidType, duidValue)
 
 	return Handler6, nil
 }