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
+)