2016-08-19 17:14:17 -07:00
|
|
|
package errors
|
2016-03-18 20:57:35 +00:00
|
|
|
|
|
|
|
|
import (
|
2017-05-31 20:28:53 +01:00
|
|
|
"fmt"
|
2016-03-18 20:57:35 +00:00
|
|
|
"log"
|
|
|
|
|
"os"
|
|
|
|
|
|
2017-02-21 22:51:47 -08:00
|
|
|
"github.com/coredns/coredns/core/dnsserver"
|
2017-09-14 09:36:06 +01:00
|
|
|
"github.com/coredns/coredns/plugin"
|
2016-04-19 22:51:23 +01:00
|
|
|
|
2016-08-19 17:14:17 -07:00
|
|
|
"github.com/mholt/caddy"
|
2016-03-18 20:57:35 +00:00
|
|
|
)
|
|
|
|
|
|
2016-08-19 17:14:17 -07:00
|
|
|
func init() {
|
|
|
|
|
caddy.RegisterPlugin("errors", caddy.Plugin{
|
|
|
|
|
ServerType: "dns",
|
|
|
|
|
Action: setup,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func setup(c *caddy.Controller) error {
|
2016-03-18 20:57:35 +00:00
|
|
|
handler, err := errorsParse(c)
|
|
|
|
|
if err != nil {
|
2017-09-14 09:36:06 +01:00
|
|
|
return plugin.Error("errors", err)
|
2016-03-18 20:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
2017-05-31 20:28:53 +01:00
|
|
|
handler.Log = log.New(os.Stdout, "", 0)
|
2016-03-18 20:57:35 +00:00
|
|
|
|
2017-09-14 09:36:06 +01:00
|
|
|
dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler {
|
2016-03-18 20:57:35 +00:00
|
|
|
handler.Next = next
|
|
|
|
|
return handler
|
2016-08-19 17:14:17 -07:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return nil
|
2016-03-18 20:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
2016-09-23 09:14:12 +01:00
|
|
|
func errorsParse(c *caddy.Controller) (errorHandler, error) {
|
|
|
|
|
handler := errorHandler{}
|
2016-03-18 20:57:35 +00:00
|
|
|
|
|
|
|
|
for c.Next() {
|
2017-05-31 20:28:53 +01:00
|
|
|
args := c.RemainingArgs()
|
|
|
|
|
switch len(args) {
|
|
|
|
|
case 0:
|
|
|
|
|
handler.LogFile = "stdout"
|
|
|
|
|
case 1:
|
|
|
|
|
if args[0] != "stdout" {
|
|
|
|
|
return handler, fmt.Errorf("invalid log file: %s", args[0])
|
2016-03-18 20:57:35 +00:00
|
|
|
}
|
2017-05-31 20:28:53 +01:00
|
|
|
handler.LogFile = args[0]
|
|
|
|
|
default:
|
|
|
|
|
return handler, c.ArgErr()
|
2016-03-18 20:57:35 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return handler, nil
|
|
|
|
|
}
|