From a66ee26a6b487065db66c487027ce4f816bc5599 Mon Sep 17 00:00:00 2001 From: Cody Soyland Date: Tue, 14 Apr 2020 16:35:39 -0500 Subject: [PATCH] Reopen log file on SIGHUP --- go.mod | 3 +++ go.sum | 2 ++ server/server.go | 22 +++++++++++++++++----- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9d9ecd366..18e398490 100644 --- a/go.mod +++ b/go.mod @@ -2,12 +2,15 @@ module github.com/pilosa/pilosa/v2 replace github.com/hashicorp/memberlist => github.com/pilosa/memberlist v0.1.4-0.20190415211605-f6512523c021 +replace github.com/client9/reopen => github.com/codysoyland/reopen v1.0.1-0.20200414204206-42cbe848be3b + require ( github.com/CAFxX/gcnotifier v0.0.0-20190112062741-224a280d589d github.com/DataDog/datadog-go v0.0.0-20180822151419-281ae9f2d895 github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect github.com/boltdb/bolt v1.3.1 github.com/cespare/xxhash v1.1.0 + github.com/client9/reopen v0.0.0-00010101000000-000000000000 github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect github.com/davecgh/go-spew v1.1.1 github.com/go-ole/go-ole v1.2.4 // indirect diff --git a/go.sum b/go.sum index 9da5feace..109caa573 100644 --- a/go.sum +++ b/go.sum @@ -26,6 +26,8 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codysoyland/reopen v1.0.1-0.20200414204206-42cbe848be3b h1:CP/etmJf4LXC6I1MJQt+I7oh8geIkWllD/NT0T23Y0c= +github.com/codysoyland/reopen v1.0.1-0.20200414204206-42cbe848be3b/go.mod h1:8fFEqM7bujfAJw/3T2Z/K8FMh+5vEsZ/8eDbNAVGFH8= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= diff --git a/server/server.go b/server/server.go index a65ba09be..70d30ab2c 100644 --- a/server/server.go +++ b/server/server.go @@ -36,6 +36,7 @@ import ( "golang.org/x/sync/errgroup" + "github.com/client9/reopen" "github.com/pilosa/pilosa/v2" "github.com/pilosa/pilosa/v2/boltdb" "github.com/pilosa/pilosa/v2/encoding/proto" @@ -419,15 +420,26 @@ func (m *Command) setupLogger() error { if m.Config.LogPath == "" { m.logOutput = m.Stderr } else { - f, err := os.OpenFile(m.Config.LogPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600) + f, err := reopen.NewFileWriter(m.Config.LogPath) if err != nil { return errors.Wrap(err, "opening file") } + sighup := make(chan os.Signal, 1) + signal.Notify(sighup, syscall.SIGHUP) + go func() { + for { + // duplicate stderr onto log file + err = m.dup(int(f.Fd()), int(os.Stderr.Fd())) + if err != nil { + io.WriteString(f, "syscall dup error: "+err.Error()) + } + + // reopen log file on SIGHUP + <-sighup + f.Reopen() + } + }() m.logOutput = f - err = m.dup(int(f.Fd()), int(os.Stderr.Fd())) - if err != nil { - return errors.Wrap(err, "syscall dup stderr to logfile") - } } if m.Config.Verbose {