diff options
author | Sarat Chandra <me@saratchandra.in> | 2019-11-11 23:34:41 +0530 |
---|---|---|
committer | Matt Holt <mholt@users.noreply.github.com> | 2019-11-11 11:04:41 -0700 |
commit | dfdddcfacba806bdce144aaba51568b41c7a480b (patch) | |
tree | 02cd32bb8a5121cea3b2078e7d394cd03849321e | |
parent | 7ff02f37b6cbdf8e73a47d94604672ca2f1f1aa7 (diff) |
logging: Support placeholders in level and filename (#2872)
* Add support for placeholders in Config
Fixes #2870
* Replace placeholders only in logging config.
Placeholders in log level and filename incase of file output are replaced.
* Add Provision to filewriter module for replacing placeholders
-rw-r--r-- | logging.go | 11 | ||||
-rw-r--r-- | modules/logging/filewriter.go | 20 |
2 files changed, 29 insertions, 2 deletions
@@ -280,8 +280,15 @@ type CustomLog struct { } func (cl *CustomLog) provision(ctx Context, logging *Logging) error { + // Replace placeholder for log level + repl := NewReplacer() + level, err := repl.ReplaceOrErr(cl.Level, true, true) + if err != nil { + return fmt.Errorf("invalid log level: %v", err) + } + // set up the log level - switch cl.Level { + switch level { case "debug": cl.levelEnabler = zapcore.DebugLevel case "", "info": @@ -351,7 +358,7 @@ func (cl *CustomLog) provision(ctx Context, logging *Logging) error { if cl.writerOpener == nil { cl.writerOpener = StderrWriter{} } - var err error + cl.writer, _, err = logging.openWriter(cl.writerOpener) if err != nil { return fmt.Errorf("opening log writer using %#v: %v", cl.writerOpener, err) diff --git a/modules/logging/filewriter.go b/modules/logging/filewriter.go index 29e805e..6957b6a 100644 --- a/modules/logging/filewriter.go +++ b/modules/logging/filewriter.go @@ -15,6 +15,7 @@ package logging import ( + "fmt" "io" "os" "path/filepath" @@ -46,6 +47,19 @@ func (FileWriter) CaddyModule() caddy.ModuleInfo { } } +// Provision sets up the module +func (fw *FileWriter) Provision(ctx caddy.Context) error { + // Replace placeholder in filename + repl := caddy.NewReplacer() + filename, err := repl.ReplaceOrErr(fw.Filename, true, true) + if err != nil { + return fmt.Errorf("invalid filename for log file: %v", err) + } + + fw.Filename = filename + return nil +} + func (fw FileWriter) String() string { fpath, err := filepath.Abs(fw.Filename) if err == nil { @@ -76,6 +90,7 @@ func (fw FileWriter) OpenWriter() (io.WriteCloser, error) { if fw.RollKeepDays == 0 { fw.RollKeepDays = 90 } + return &lumberjack.Logger{ Filename: fw.Filename, MaxSize: fw.RollSizeMB, @@ -89,3 +104,8 @@ func (fw FileWriter) OpenWriter() (io.WriteCloser, error) { // otherwise just open a regular file return os.OpenFile(fw.Filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666) } + +// Interface guards +var ( + _ caddy.Provisioner = (*FileWriter)(nil) +) |