From 728c4a5e380cd2feef6f0f49422b3dd8297c71db Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Tue, 26 Apr 2022 17:55:24 +0200 Subject: [bugfix] Trim log entries to 1700 chars before they enter syslog (#493) * start implementing trimming hook * add test with very long test * test syslog w/ unix socket + long (trimmed) msg * trim long entries with trimhook * trim to 1700 chars instead --- internal/log/trimhook.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 internal/log/trimhook.go (limited to 'internal/log/trimhook.go') diff --git a/internal/log/trimhook.go b/internal/log/trimhook.go new file mode 100644 index 000000000..c9faccb90 --- /dev/null +++ b/internal/log/trimhook.go @@ -0,0 +1,53 @@ +/* + GoToSocial + Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package log + +import ( + "github.com/sirupsen/logrus" +) + +// trimHook is a wrapper round a logrus hook that trims the *entry.Message +// to no more than 1700 characters before sending it through to the wrapped hook, +// to avoid spamming syslog with messages that are too long for it. +type trimHook struct { + wrappedHook logrus.Hook +} + +func (t *trimHook) Fire(e *logrus.Entry) error { + // only copy/truncate if we need to + if len(e.Message) < 1700 { + return t.wrappedHook.Fire(e) + } + + // it's too long, truncate + fire a copy of the entry so we don't meddle with the original + return t.wrappedHook.Fire(&logrus.Entry{ + Logger: e.Logger, + Data: e.Data, + Time: e.Time, + Level: e.Level, + Caller: e.Caller, + Message: e.Message[:1696] + "...", // truncate + Buffer: e.Buffer, + Context: e.Context, + }) +} + +func (t *trimHook) Levels() []logrus.Level { + return t.wrappedHook.Levels() +} -- cgit v1.2.3