@marcel91200 / caddy Mirror · read-only / commits / dfdddcfa
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 14, 05:15 UTC

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

Sarat Chandra committed Nov 11, 2019 at 23:34 UTC dfdddcfacba806bdce144aaba51568b41c7a480b
2 files changed +29 -2
logging.go
+9 -2
@@ -280,8 +280,15 @@ type CustomLog struct {
280 }
281
282 func (cl *CustomLog) provision(ctx Context, logging *Logging) error {
283 + // Replace placeholder for log level
284 + repl := NewReplacer()
285 + level, err := repl.ReplaceOrErr(cl.Level, true, true)
286 + if err != nil {
287 + return fmt.Errorf("invalid log level: %v", err)
288 + }
289 +
290 // set up the log level
284 - switch cl.Level {
291 + switch level {
292 case "debug":
293 cl.levelEnabler = zapcore.DebugLevel
294 case "", "info":
@@ -351,7 +358,7 @@ func (cl *CustomLog) provision(ctx Context, logging *Logging) error {
358 if cl.writerOpener == nil {
359 cl.writerOpener = StderrWriter{}
360 }
354 - var err error
361 +
362 cl.writer, _, err = logging.openWriter(cl.writerOpener)
363 if err != nil {
364 return fmt.Errorf("opening log writer using %#v: %v", cl.writerOpener, err)
modules/logging/filewriter.go
+20
@@ -15,6 +15,7 @@
15 package logging
16
17 import (
18 + "fmt"
19 "io"
20 "os"
21 "path/filepath"
@@ -46,6 +47,19 @@ func (FileWriter) CaddyModule() caddy.ModuleInfo {
47 }
48 }
49
50 +// Provision sets up the module
51 +func (fw *FileWriter) Provision(ctx caddy.Context) error {
52 + // Replace placeholder in filename
53 + repl := caddy.NewReplacer()
54 + filename, err := repl.ReplaceOrErr(fw.Filename, true, true)
55 + if err != nil {
56 + return fmt.Errorf("invalid filename for log file: %v", err)
57 + }
58 +
59 + fw.Filename = filename
60 + return nil
61 +}
62 +
63 func (fw FileWriter) String() string {
64 fpath, err := filepath.Abs(fw.Filename)
65 if err == nil {
@@ -76,6 +90,7 @@ func (fw FileWriter) OpenWriter() (io.WriteCloser, error) {
90 if fw.RollKeepDays == 0 {
91 fw.RollKeepDays = 90
92 }
93 +
94 return &lumberjack.Logger{
95 Filename: fw.Filename,
96 MaxSize: fw.RollSizeMB,
@@ -89,3 +104,8 @@ func (fw FileWriter) OpenWriter() (io.WriteCloser, error) {
104 // otherwise just open a regular file
105 return os.OpenFile(fw.Filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
106 }
107 +
108 +// Interface guards
109 +var (
110 + _ caddy.Provisioner = (*FileWriter)(nil)
111 +)