From e65f289e85347a8f90ff4f28e94711873c2ec6d0 Mon Sep 17 00:00:00 2001 From: konrad Date: Wed, 23 Jan 2019 22:18:04 +0100 Subject: [PATCH] Logging to files works now --- .gitignore | 3 ++- main.go | 3 +++ pkg/config/config.go | 2 ++ pkg/log/logging.go | 53 +++++++++++++++++++++++++++++++++----------- pkg/routes/routes.go | 5 ++++- 5 files changed, 51 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 55a93ed7e..bcddba0bc 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ Test_* bin/ secrets *.deb -debian/ \ No newline at end of file +debian/ +logs/ \ No newline at end of file diff --git a/main.go b/main.go index d265db19d..d2be7da73 100644 --- a/main.go +++ b/main.go @@ -35,6 +35,9 @@ var Version = "0.1" func main() { + // Set logger + log.InitLogger() + // Set Engine err := models.SetEngine() if err != nil { diff --git a/pkg/config/config.go b/pkg/config/config.go index be5428655..e3812e26f 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -82,6 +82,8 @@ func init() { viper.SetDefault("log.standard", "stdout") viper.SetDefault("log.database", false) viper.SetDefault("log.http", true) + viper.SetDefault("log.echo", false) // Echo has its own logging which usually is unnessecary. + viper.SetDefault("log.path", viper.GetString("service.rootpath")+"/logs") // Init checking for environment variables viper.SetEnvPrefix("vikunja") diff --git a/pkg/log/logging.go b/pkg/log/logging.go index f92271e6e..330c9557f 100644 --- a/pkg/log/logging.go +++ b/pkg/log/logging.go @@ -37,15 +37,38 @@ const Fmt = `%{color}%{time:` + time.RFC3339Nano + `}: %{level}` + "\t" + `▶ % // Log is the handler for the logger var Log = logging.MustGetLogger("vikunja") -// Initializes the global log handler -func init() { +// InitLogger initializes the global log handler +func InitLogger() { if !viper.GetBool("log.enabled") { return } + if viper.GetString("log.errors") == "file" || viper.GetString("log.standard") == "file" { + err := os.Mkdir(viper.GetString("log.path"), 0744) + if err != nil && !os.IsExist(err) { + log.Fatal("Could not create log folder: ", err.Error()) + } + } + + // TODO: work out how to set up the other log stuff + // TODO: Docs for new config options + // We define our two backends - errBackend := logging.NewLogBackend(GetErrorLogWriter(), "", 0) - stdBackend := logging.NewLogBackend(GetLogWriter(), "", 0) + stdWriter, _ := GetLogWriter() + /*defer func() { + if err := stdfile.Close(); err != nil { + log.Fatal(err) + } + }()*/ + + errWriter, _ := GetErrorLogWriter() + /*defer func() { + if err := errFile.Close(); err != nil { + log.Fatal(err) + } + }()*/ + errBackend := logging.NewLogBackend(errWriter, "", 0) + stdBackend := logging.NewLogBackend(stdWriter, "", 0) // Set the standard backend stdBackendFormatter := logging.NewBackendFormatter(stdBackend, logging.MustStringFormatter(Fmt+"\n")) @@ -60,20 +83,18 @@ func init() { logging.SetBackend(stdBackendFormatter, errBackendLeveled) } +// TODO: Refactor these bot functions (it probably isn't needed to return the file shit) + // GetLogWriter returns the writer to where the normal log goes, depending on the config -func GetLogWriter() (writer io.Writer) { +func GetLogWriter() (writer io.Writer, logfile *os.File) { switch viper.GetString("log.standard") { case "file": - f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + logfile, err := os.OpenFile(viper.GetString("log.path")+"/standard.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { log.Fatal(err) } - writer = f - defer func() { - if err := f.Close(); err != nil { - log.Fatal(err) - } - }() + writer = logfile + break case "stdout": default: writer = os.Stdout @@ -82,9 +103,15 @@ func GetLogWriter() (writer io.Writer) { } // GetErrorLogWriter returns the writer to where the error log goes, depending on the config -func GetErrorLogWriter() (writer io.Writer) { +func GetErrorLogWriter() (writer io.Writer, logfile *os.File) { switch viper.GetString("log.error") { case "file": + logfile, err := os.OpenFile(viper.GetString("log.path")+"/error.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + log.Fatal(err) + } + writer = logfile + break case "stdout": default: writer = os.Stderr diff --git a/pkg/routes/routes.go b/pkg/routes/routes.go index fd5eaf838..fb39d3528 100644 --- a/pkg/routes/routes.go +++ b/pkg/routes/routes.go @@ -86,7 +86,10 @@ func NewEcho() *echo.Echo { e.HideBanner = true if l, ok := e.Logger.(*elog.Logger); ok { - l.SetLevel(elog.ERROR) + if !viper.GetBool("log.echo") { + l.SetLevel(elog.OFF) + } + l.EnableColor() l.SetHeader(log.ErrFmt) }