aboutsummaryrefslogtreecommitdiff
path: root/middleware/roller.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/roller.go')
-rw-r--r--middleware/roller.go35
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