diff options
Diffstat (limited to 'middleware/roller.go')
-rw-r--r-- | middleware/roller.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/middleware/roller.go b/middleware/roller.go index 995cabf91..81ff71c44 100644 --- a/middleware/roller.go +++ b/middleware/roller.go @@ -2,10 +2,45 @@ package middleware import ( "io" + "strconv" + "github.com/mholt/caddy" "gopkg.in/natefinch/lumberjack.v2" ) +func ParseRoller(c *caddy.Controller) (*LogRoller, error) { + var size, age, keep int + // This is kind of a hack to support nested blocks: + // As we are already in a block: either log or errors, + // c.nesting > 0 but, as soon as c meets a }, it thinks + // the block is over and return false for c.NextBlock. + for c.NextBlock() { + what := c.Val() + if !c.NextArg() { + return nil, c.ArgErr() + } + value := c.Val() + var err error + switch what { + case "size": + size, err = strconv.Atoi(value) + case "age": + age, err = strconv.Atoi(value) + case "keep": + keep, err = strconv.Atoi(value) + } + if err != nil { + return nil, err + } + } + return &LogRoller{ + MaxSize: size, + MaxAge: age, + MaxBackups: keep, + LocalTime: true, + }, nil +} + // LogRoller implements a middleware that provides a rolling logger. type LogRoller struct { Filename string |