aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Ashby <MFAshby@users.noreply.github.com>2021-12-16 15:37:01 +0000
committerGitHub <noreply@github.com>2021-12-16 15:37:01 +0000
commite5a5be9f545e09ad86eea9d8cb8a56fb302e4852 (patch)
tree368438a1833e737e47bd56b3f616aa669fb8c67e
parent002c3e0a5ff18c0b36c4c8e6cebea61547c9ac51 (diff)
Added std type to logging config. (#2060)
* Added std type to logging level. Added demux-ing of logging to stdout/err working around https://github.com/sirupsen/logrus/issues/403 Turned off the default logging in favour of using hooks always. Added fallback, if no stdout/err logger was configured, add one automatically. This prevents unexpected lack of logging after an upgrade in case the user's configuration file is not updated. Fixes: https://github.com/matrix-org/dendrite/issues/2054 Signed-off-by: Martin Ashby <martin@ashbysoft.com> * Fix build on Windows - revert function rename SetupHookLogging Fixes https://github.com/matrix-org/dendrite/pull/2060/files#r761692681 * Revert logging formatter changes to log.go, base.go. The same formatting should be applied on both windows and unix, so it makes sense to keep it in files which are shared between both platforms. Fixes https://github.com/matrix-org/dendrite/pull/2060#discussion_r762557679 * Remove unnecessary startup logging about info level logger. Fixes https://github.com/matrix-org/dendrite/pull/2060#discussion_r763959474 Co-authored-by: Neil Alexander <neilalexander@users.noreply.github.com>
-rw-r--r--dendrite-config.yaml5
-rw-r--r--go.mod1
-rw-r--r--go.sum2
-rw-r--r--internal/log_unix.go17
4 files changed, 22 insertions, 3 deletions
diff --git a/dendrite-config.yaml b/dendrite-config.yaml
index 1204bd54..bf3811a2 100644
--- a/dendrite-config.yaml
+++ b/dendrite-config.yaml
@@ -370,9 +370,10 @@ tracing:
baggage_restrictions: null
throttler: null
-# Logging configuration, in addition to the standard logging that is sent to
-# stdout by Dendrite.
+# Logging configuration
logging:
+- type: std
+ level: info
- type: file
level: info
params:
diff --git a/go.mod b/go.mod
index 93ba3ba3..5cd4b0e1 100644
--- a/go.mod
+++ b/go.mod
@@ -4,6 +4,7 @@ require (
github.com/Arceliar/ironwood v0.0.0-20210619124114-6ad55cae5031
github.com/DATA-DOG/go-sqlmock v1.5.0
github.com/HdrHistogram/hdrhistogram-go v1.0.1 // indirect
+ github.com/MFAshby/stdemuxerhook v1.0.0 // indirect
github.com/Masterminds/semver/v3 v3.1.1
github.com/Shopify/sarama v1.29.1
github.com/codeclysm/extract v2.2.0+incompatible
diff --git a/go.sum b/go.sum
index ae66d888..f14e2e98 100644
--- a/go.sum
+++ b/go.sum
@@ -59,6 +59,8 @@ github.com/HdrHistogram/hdrhistogram-go v1.0.1 h1:GX8GAYDuhlFQnI2fRDHQhTlkHMz8bE
github.com/HdrHistogram/hdrhistogram-go v1.0.1/go.mod h1:BWJ+nMSHY3L41Zj7CA3uXnloDp7xxV0YvstAE7nKTaM=
github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y=
+github.com/MFAshby/stdemuxerhook v1.0.0 h1:1XFGzakrsHMv76AeanPDL26NOgwjPl/OUxbGhJthwMc=
+github.com/MFAshby/stdemuxerhook v1.0.0/go.mod h1:nLMI9FUf9Hz98n+yAXsTMUR4RZQy28uCTLG1Fzvj/uY=
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
diff --git a/internal/log_unix.go b/internal/log_unix.go
index 25ad0420..1e1094f2 100644
--- a/internal/log_unix.go
+++ b/internal/log_unix.go
@@ -12,13 +12,16 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+//go:build !windows
// +build !windows
package internal
import (
+ "io/ioutil"
"log/syslog"
+ "github.com/MFAshby/stdemuxerhook"
"github.com/matrix-org/dendrite/setup/config"
"github.com/sirupsen/logrus"
lSyslog "github.com/sirupsen/logrus/hooks/syslog"
@@ -28,7 +31,7 @@ import (
// 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) {
- logrus.SetReportCaller(true)
+ stdLogAdded := false
for _, hook := range hooks {
// Check we received a proper logging level
level, err := logrus.ParseLevel(hook.Level)
@@ -49,10 +52,18 @@ func SetupHookLogging(hooks []config.LogrusHook, componentName string) {
case "syslog":
checkSyslogHookParams(hook.Params)
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)
+ }
+ // Hooks are now configured for stdout/err, so throw away the default logger output
+ logrus.SetOutput(ioutil.Discard)
}
func checkSyslogHookParams(params map[string]interface{}) {
@@ -76,6 +87,10 @@ func checkSyslogHookParams(params map[string]interface{}) {
}
+func setupStdLogHook(level logrus.Level) {
+ logrus.AddHook(&logLevelHook{level, stdemuxerhook.New(logrus.StandardLogger())})
+}
+
func setupSyslogHook(hook config.LogrusHook, level logrus.Level, componentName string) {
syslogHook, err := lSyslog.NewSyslogHook(hook.Params["protocol"].(string), hook.Params["address"].(string), syslog.LOG_INFO, componentName)
if err == nil {