aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/log.go5
-rw-r--r--internal/log_unix.go13
2 files changed, 12 insertions, 6 deletions
diff --git a/internal/log.go b/internal/log.go
index a171555a..d7e852c8 100644
--- a/internal/log.go
+++ b/internal/log.go
@@ -33,6 +33,11 @@ import (
"github.com/matrix-org/dendrite/setup/config"
)
+// logrus is using a global variable when we're using `logrus.AddHook`
+// this unfortunately results in us adding the same hook multiple times.
+// This map ensures we only ever add one level hook.
+var stdLevelLogAdded = make(map[logrus.Level]bool)
+
type utcFormatter struct {
logrus.Formatter
}
diff --git a/internal/log_unix.go b/internal/log_unix.go
index 75332af7..b38e7c2e 100644
--- a/internal/log_unix.go
+++ b/internal/log_unix.go
@@ -22,16 +22,16 @@ import (
"log/syslog"
"github.com/MFAshby/stdemuxerhook"
- "github.com/matrix-org/dendrite/setup/config"
"github.com/sirupsen/logrus"
lSyslog "github.com/sirupsen/logrus/hooks/syslog"
+
+ "github.com/matrix-org/dendrite/setup/config"
)
// SetupHookLogging configures the logging hooks defined in the configuration.
// If something fails here it means that the logging was improperly configured,
// so we just exit with the error
func SetupHookLogging(hooks []config.LogrusHook, componentName string) {
- stdLogAdded := false
for _, hook := range hooks {
// Check we received a proper logging level
level, err := logrus.ParseLevel(hook.Level)
@@ -54,14 +54,11 @@ func SetupHookLogging(hooks []config.LogrusHook, componentName string) {
setupSyslogHook(hook, level, componentName)
case "std":
setupStdLogHook(level)
- stdLogAdded = true
default:
logrus.Fatalf("Unrecognised logging hook type: %s", hook.Type)
}
}
- if !stdLogAdded {
- setupStdLogHook(logrus.InfoLevel)
- }
+ setupStdLogHook(logrus.InfoLevel)
// Hooks are now configured for stdout/err, so throw away the default logger output
logrus.SetOutput(io.Discard)
}
@@ -88,7 +85,11 @@ func checkSyslogHookParams(params map[string]interface{}) {
}
func setupStdLogHook(level logrus.Level) {
+ if stdLevelLogAdded[level] {
+ return
+ }
logrus.AddHook(&logLevelHook{level, stdemuxerhook.New(logrus.StandardLogger())})
+ stdLevelLogAdded[level] = true
}
func setupSyslogHook(hook config.LogrusHook, level logrus.Level, componentName string) {