diff options
author | 2022-04-26 17:55:24 +0200 | |
---|---|---|
committer | 2022-04-26 17:55:24 +0200 | |
commit | 728c4a5e380cd2feef6f0f49422b3dd8297c71db (patch) | |
tree | 4be01a63275f8180c0a63c488ad3f0d3e6118bc4 /internal/log/trimhook.go | |
parent | [bugfix] Fix CWs not showing sometimes (#488) (diff) | |
download | gotosocial-728c4a5e380cd2feef6f0f49422b3dd8297c71db.tar.xz |
[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
Diffstat (limited to 'internal/log/trimhook.go')
-rw-r--r-- | internal/log/trimhook.go | 53 |
1 files changed, 53 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. +*/ + +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() +} |