summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSarat Chandra <me@saratchandra.in>2019-11-11 23:34:41 +0530
committerMatt Holt <mholt@users.noreply.github.com>2019-11-11 11:04:41 -0700
commitdfdddcfacba806bdce144aaba51568b41c7a480b (patch)
tree02cd32bb8a5121cea3b2078e7d394cd03849321e
parent7ff02f37b6cbdf8e73a47d94604672ca2f1f1aa7 (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.go11
-rw-r--r--modules/logging/filewriter.go20
2 files changed, 29 insertions, 2 deletions
diff --git a/logging.go b/logging.go
index e809617..97c0513 100644
--- a/logging.go
+++ b/logging.go
@@ -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)
+)