From 213bf349c319811c8cb5458ac24ad9e61c5bbe4d Mon Sep 17 00:00:00 2001 From: z3bra Date: Sat, 18 Jul 2020 15:46:19 +0200 Subject: [PATCH] Add an option to log into a file rather than stdout (#1168) Use Logfile option in the `[general]` section --- bridge/config/config.go | 11 +++++++++++ matterbridge.go | 9 +++++++++ matterbridge.toml.sample | 8 ++++++++ 3 files changed, 28 insertions(+) diff --git a/bridge/config/config.go b/bridge/config/config.go index d98c9423..6e99066c 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -3,6 +3,7 @@ package config import ( "bytes" "io/ioutil" + "os" "path/filepath" "strings" "sync" @@ -93,6 +94,7 @@ type Protocol struct { JoinDelay string // all protocols Label string // all protocols Login string // mattermost, matrix + LogFile string // general MediaDownloadBlackList []string MediaDownloadPath string // Basically MediaServerUpload, but instead of uploading it, just write it to a file on the same server. MediaDownloadSize int // all protocols @@ -247,6 +249,15 @@ func NewConfig(rootLogger *logrus.Logger, cfgfile string) Config { cfgtype := detectConfigType(cfgfile) mycfg := newConfigFromString(logger, input, cfgtype) + if mycfg.cv.General.LogFile != "" { + logfile, err := os.OpenFile(mycfg.cv.General.LogFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) + if err == nil { + logger.Info("Opening log file ", mycfg.cv.General.LogFile) + rootLogger.Out = logfile + } else { + logger.Warn("Failed to open ", mycfg.cv.General.LogFile) + } + } if mycfg.cv.General.MediaDownloadSize == 0 { mycfg.cv.General.MediaDownloadSize = 1000000 } diff --git a/matterbridge.go b/matterbridge.go index 7b04182d..63fd12f7 100644 --- a/matterbridge.go +++ b/matterbridge.go @@ -51,6 +51,15 @@ func main() { cfg := config.NewConfig(rootLogger, *flagConfig) cfg.BridgeValues().General.Debug = *flagDebug + // if logging to a file, ensure it is closed when the program terminates + // nolint:errcheck + defer func() { + if f, ok := rootLogger.Out.(*os.File); ok { + f.Sync() + f.Close() + } + }() + r, err := gateway.NewRouter(rootLogger, cfg, bridgemap.FullMap) if err != nil { logger.Fatalf("Starting gateway failed: %s", err) diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index 975078c7..156e1f25 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -1604,6 +1604,14 @@ MediaDownloadBlacklist=[".html$",".htm$"] #OPTIONAL (default false) IgnoreFailureOnStart=false +#LogFile defines the location of a file to write logs into, rather +#than stdout. +#Logging will still happen on stdout if the file cannot be open for +#writing, or if the value is empty. Note that the log won't roll, so +#you might want to use logrotate(8) with this feature. +#OPTIONAL (default empty) +LogFile=/var/log/matterbridge.log + ################################################################### #Tengo configuration ###################################################################