diff --git a/api/router.go b/api/router.go index 3536ab09..e537e6c0 100644 --- a/api/router.go +++ b/api/router.go @@ -2,7 +2,6 @@ package api import ( "net/http" - "os" "sync/atomic" "github.com/aptly-dev/aptly/aptly" @@ -56,13 +55,9 @@ func Router(c *ctx.AptlyContext) http.Handler { router.UseRawPath = true if c.Config().LogFormat == "json" { - c.StructuredLogging(true) - utils.SetupJSONLogger(c.Config().LogLevel, os.Stdout) gin.DefaultWriter = utils.LogWriter{Logger: log.Logger} router.Use(JSONLogger()) } else { - c.StructuredLogging(false) - utils.SetupDefaultLogger(c.Config().LogLevel) router.Use(gin.Logger()) } diff --git a/console/progress.go b/console/progress.go index 16191857..d86434cc 100644 --- a/console/progress.go +++ b/console/progress.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/aptly-dev/aptly/aptly" + "github.com/aptly-dev/aptly/utils" "github.com/cheggaaa/pb" "github.com/rs/zerolog/log" "github.com/wsxiaoys/terminal/color" @@ -78,7 +79,7 @@ func (p *Progress) InitBar(count int64, isBytes bool, _ aptly.BarType) { if p.bar != nil { panic("bar already initialized") } - if RunningOnTerminal() { + if utils.RunningOnTerminal() { p.bar = pb.New(0) p.bar.Total = count p.bar.NotPrint = true @@ -141,7 +142,7 @@ func (p *Progress) PrintfStdErr(msg string, a ...interface{}) { // ColoredPrintf does printf in colored way + newline func (p *Progress) ColoredPrintf(msg string, a ...interface{}) { - if RunningOnTerminal() { + if utils.RunningOnTerminal() { p.queue <- printTask{code: codePrint, message: color.Sprintf(msg, a...) + "\n"} } else { // stip color marks diff --git a/console/terminal.go b/console/terminal.go deleted file mode 100644 index ba88af70..00000000 --- a/console/terminal.go +++ /dev/null @@ -1,12 +0,0 @@ -package console - -import ( - "syscall" - - "golang.org/x/term" -) - -// RunningOnTerminal checks whether stdout is terminal -func RunningOnTerminal() bool { - return term.IsTerminal(syscall.Stdout) -} diff --git a/context/context.go b/context/context.go index 5df5bbfd..545a1aa9 100644 --- a/context/context.go +++ b/context/context.go @@ -123,6 +123,14 @@ func (context *AptlyContext) config() *utils.ConfigStructure { } } + if utils.Config.LogFormat == "json" { + context.StructuredLogging(true) + utils.SetupJSONLogger(utils.Config.LogLevel, os.Stdout) + } else { + context.StructuredLogging(false) + utils.SetupDefaultLogger(utils.Config.LogLevel) + } + context.configLoaded = true } diff --git a/s3/public.go b/s3/public.go index 234a4b22..1f5340ce 100644 --- a/s3/public.go +++ b/s3/public.go @@ -172,6 +172,7 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err } defer source.Close() + log.Debug().Msgf("S3: PutFile '%s'", path) err = storage.putFile(path, source, "") if err != nil { err = errors.Wrap(err, fmt.Sprintf("error uploading %s to %s", sourceFilename, storage)) @@ -196,7 +197,6 @@ func (storage *PublishedStorage) getMD5(path string) (string, error) { // putFile uploads file-like object to func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker, sourceMD5 string) error { - params := &s3.PutObjectInput{ Bucket: aws.String(storage.bucket), Key: aws.String(filepath.Join(storage.prefix, path)), @@ -238,6 +238,7 @@ func (storage *PublishedStorage) Remove(path string) error { Key: aws.String(filepath.Join(storage.prefix, path)), } + log.Debug().Msgf("S3: Remove '%s'", path) if _, err := storage.s3.DeleteObject(context.TODO(), params); err != nil { var notFoundErr *smithy.GenericAPIError if errors.As(err, ¬FoundErr) && notFoundErr.Code == "NoSuchBucket" { @@ -270,6 +271,7 @@ func (storage *PublishedStorage) RemoveDirs(path string, _ aptly.Progress) error return err } + log.Debug().Msgf("S3: RemoveDirs '%s'", path) if storage.disableMultiDel { for i := range filelist { params := &s3.DeleteObjectInput{ @@ -385,6 +387,7 @@ func (storage *PublishedStorage) LinkFromPool(publishedPrefix, publishedRelPath, } defer source.Close() + log.Debug().Msgf("S3: LinkFromPool '%s'", relPath) err = storage.putFile(relPath, source, sourceMD5) if err == nil { storage.pathCache[relPath] = sourceMD5 @@ -465,6 +468,7 @@ func (storage *PublishedStorage) RenameFile(oldName, newName string) error { params.ServerSideEncryption = storage.encryptionMethod } + log.Debug().Msgf("S3: RenameFile %s -> %s", oldName, newName) _, err := storage.s3.CopyObject(context.TODO(), params) if err != nil { return fmt.Errorf("error copying %s -> %s in %s: %s", oldName, newName, storage, err) @@ -494,6 +498,7 @@ func (storage *PublishedStorage) SymLink(src string, dst string) error { params.ServerSideEncryption = types.ServerSideEncryption(storage.encryptionMethod) } + log.Debug().Msgf("S3: SymLink %s -> %s", src, dst) _, err := storage.s3.CopyObject(context.TODO(), params) if err != nil { return fmt.Errorf("error symlinking %s -> %s in %s: %s", src, dst, storage, err) @@ -504,6 +509,7 @@ func (storage *PublishedStorage) SymLink(src string, dst string) error { // HardLink using symlink functionality as hard links do not exist func (storage *PublishedStorage) HardLink(src string, dst string) error { + log.Debug().Msgf("S3: HardLink %s -> %s", src, dst) return storage.SymLink(src, dst) } diff --git a/system/t06_publish/S3Publish1Test_gold b/system/t06_publish/S3Publish1Test_gold index b65701eb..33690b03 100644 --- a/system/t06_publish/S3Publish1Test_gold +++ b/system/t06_publish/S3Publish1Test_gold @@ -1,8 +1,26 @@ Loading packages... Generating metadata files and linking package files... +DBG S3: LinkFromPool 'pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb' +DBG S3: LinkFromPool 'pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc' +DBG S3: LinkFromPool 'pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz' +DBG S3: LinkFromPool 'pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz' +DBG S3: LinkFromPool 'pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc' Finalizing metadata files... +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.gz' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.bz2' +DBG S3: PutFile 'dists/maverick/main/source/Sources' +DBG S3: PutFile 'dists/maverick/main/source/Sources.gz' +DBG S3: PutFile 'dists/maverick/main/source/Sources.bz2' +DBG S3: PutFile 'dists/maverick/main/Contents-i386.gz' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Release' +DBG S3: PutFile 'dists/maverick/main/source/Release' +DBG S3: PutFile 'dists/maverick/Contents-i386.gz' +DBG S3: PutFile 'dists/maverick/Release' Signing file 'Release' with gpg, please enter your passphrase when prompted: +DBG S3: PutFile 'dists/maverick/Release.gpg' Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: +DBG S3: PutFile 'dists/maverick/InRelease' Local repo local-repo has been successfully published. Now you can add following line to apt sources: diff --git a/system/t06_publish/S3Publish2Test_gold b/system/t06_publish/S3Publish2Test_gold index cd68115c..e4fcd5cc 100644 --- a/system/t06_publish/S3Publish2Test_gold +++ b/system/t06_publish/S3Publish2Test_gold @@ -1,9 +1,52 @@ Loading packages... Generating metadata files and linking package files... Finalizing metadata files... +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.bz2' +DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp' +DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp.bz2' +DBG S3: PutFile 'dists/maverick/main/Contents-i386.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Release.tmp' +DBG S3: PutFile 'dists/maverick/main/source/Release.tmp' +DBG S3: PutFile 'dists/maverick/Contents-i386.tmp.gz' +DBG S3: PutFile 'dists/maverick/Release.tmp' Signing file 'Release' with gpg, please enter your passphrase when prompted: +DBG S3: PutFile 'dists/maverick/Release.tmp.gpg' Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: +DBG S3: PutFile 'dists/maverick/InRelease.tmp' +DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp -> dists/maverick/main/binary-i386/Packages +DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp' +DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.gz -> dists/maverick/main/binary-i386/Packages.gz +DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.gz' +DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.bz2 -> dists/maverick/main/binary-i386/Packages.bz2 +DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.bz2' +DBG S3: RenameFile dists/maverick/main/Contents-i386.tmp.gz -> dists/maverick/main/Contents-i386.gz +DBG S3: Remove 'dists/maverick/main/Contents-i386.tmp.gz' +DBG S3: RenameFile dists/maverick/main/binary-i386/Release.tmp -> dists/maverick/main/binary-i386/Release +DBG S3: Remove 'dists/maverick/main/binary-i386/Release.tmp' +DBG S3: RenameFile dists/maverick/InRelease.tmp -> dists/maverick/InRelease +DBG S3: Remove 'dists/maverick/InRelease.tmp' +DBG S3: RenameFile dists/maverick/main/source/Sources.tmp -> dists/maverick/main/source/Sources +DBG S3: Remove 'dists/maverick/main/source/Sources.tmp' +DBG S3: RenameFile dists/maverick/main/source/Sources.tmp.gz -> dists/maverick/main/source/Sources.gz +DBG S3: Remove 'dists/maverick/main/source/Sources.tmp.gz' +DBG S3: RenameFile dists/maverick/main/source/Sources.tmp.bz2 -> dists/maverick/main/source/Sources.bz2 +DBG S3: Remove 'dists/maverick/main/source/Sources.tmp.bz2' +DBG S3: RenameFile dists/maverick/main/source/Release.tmp -> dists/maverick/main/source/Release +DBG S3: Remove 'dists/maverick/main/source/Release.tmp' +DBG S3: RenameFile dists/maverick/Contents-i386.tmp.gz -> dists/maverick/Contents-i386.gz +DBG S3: Remove 'dists/maverick/Contents-i386.tmp.gz' +DBG S3: RenameFile dists/maverick/Release.tmp -> dists/maverick/Release +DBG S3: Remove 'dists/maverick/Release.tmp' +DBG S3: RenameFile dists/maverick/Release.tmp.gpg -> dists/maverick/Release.gpg +DBG S3: Remove 'dists/maverick/Release.tmp.gpg' Cleaning up published repository s3:test1:./maverick... Cleaning up component 'main'... +DBG S3: Remove 'pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc' +DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz' +DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc' +DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz' Published local repository s3:test1:./maverick [i386, source] publishes {main: [local-repo]} has been updated successfully. diff --git a/system/t06_publish/S3Publish3Test_gold b/system/t06_publish/S3Publish3Test_gold index 348fbe81..b8e67b68 100644 --- a/system/t06_publish/S3Publish3Test_gold +++ b/system/t06_publish/S3Publish3Test_gold @@ -1,9 +1,58 @@ Loading packages... Generating metadata files and linking package files... Finalizing metadata files... +DBG S3: PutFile 'dists/maverick/main/binary-i386/Release.tmp' +DBG S3: PutFile 'dists/maverick/Contents-amd64.tmp.gz' +DBG S3: PutFile 'dists/maverick/Contents-i386.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/binary-amd64/Packages.tmp' +DBG S3: PutFile 'dists/maverick/main/binary-amd64/Packages.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/binary-amd64/Packages.tmp.bz2' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.bz2' +DBG S3: PutFile 'dists/maverick/main/Contents-amd64.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/Contents-i386.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/binary-amd64/Release.tmp' +DBG S3: PutFile 'dists/maverick/Release.tmp' Signing file 'Release' with gpg, please enter your passphrase when prompted: +DBG S3: PutFile 'dists/maverick/Release.tmp.gpg' Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: +DBG S3: PutFile 'dists/maverick/InRelease.tmp' +DBG S3: RenameFile dists/maverick/main/Contents-amd64.tmp.gz -> dists/maverick/main/Contents-amd64.gz +DBG S3: Remove 'dists/maverick/main/Contents-amd64.tmp.gz' +DBG S3: RenameFile dists/maverick/main/binary-i386/Release.tmp -> dists/maverick/main/binary-i386/Release +DBG S3: Remove 'dists/maverick/main/binary-i386/Release.tmp' +DBG S3: RenameFile dists/maverick/main/Contents-i386.tmp.gz -> dists/maverick/main/Contents-i386.gz +DBG S3: Remove 'dists/maverick/main/Contents-i386.tmp.gz' +DBG S3: RenameFile dists/maverick/main/binary-amd64/Release.tmp -> dists/maverick/main/binary-amd64/Release +DBG S3: Remove 'dists/maverick/main/binary-amd64/Release.tmp' +DBG S3: RenameFile dists/maverick/Release.tmp -> dists/maverick/Release +DBG S3: Remove 'dists/maverick/Release.tmp' +DBG S3: RenameFile dists/maverick/InRelease.tmp -> dists/maverick/InRelease +DBG S3: Remove 'dists/maverick/InRelease.tmp' +DBG S3: RenameFile dists/maverick/main/binary-amd64/Packages.tmp -> dists/maverick/main/binary-amd64/Packages +DBG S3: Remove 'dists/maverick/main/binary-amd64/Packages.tmp' +DBG S3: RenameFile dists/maverick/main/binary-amd64/Packages.tmp.bz2 -> dists/maverick/main/binary-amd64/Packages.bz2 +DBG S3: Remove 'dists/maverick/main/binary-amd64/Packages.tmp.bz2' +DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.bz2 -> dists/maverick/main/binary-i386/Packages.bz2 +DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.bz2' +DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp -> dists/maverick/main/binary-i386/Packages +DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp' +DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.gz -> dists/maverick/main/binary-i386/Packages.gz +DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.gz' +DBG S3: RenameFile dists/maverick/Release.tmp.gpg -> dists/maverick/Release.gpg +DBG S3: Remove 'dists/maverick/Release.tmp.gpg' +DBG S3: RenameFile dists/maverick/Contents-amd64.tmp.gz -> dists/maverick/Contents-amd64.gz +DBG S3: Remove 'dists/maverick/Contents-amd64.tmp.gz' +DBG S3: RenameFile dists/maverick/Contents-i386.tmp.gz -> dists/maverick/Contents-i386.gz +DBG S3: Remove 'dists/maverick/Contents-i386.tmp.gz' +DBG S3: RenameFile dists/maverick/main/binary-amd64/Packages.tmp.gz -> dists/maverick/main/binary-amd64/Packages.gz +DBG S3: Remove 'dists/maverick/main/binary-amd64/Packages.tmp.gz' Cleaning up published repository s3:test1:./maverick... Cleaning up component 'main'... +DBG S3: Remove 'pool/main/g/gnuplot/gnuplot-doc_4.6.1-1~maverick2_all.deb' +DBG S3: Remove 'pool/main/g/gnuplot/gnuplot-nox_4.6.1-1~maverick2_amd64.deb' +DBG S3: Remove 'pool/main/g/gnuplot/gnuplot-nox_4.6.1-1~maverick2_i386.deb' +DBG S3: Remove 'pool/main/g/gnuplot/gnuplot_4.6.1-1~maverick2_all.deb' Published snapshot repository s3:test1:./maverick (origin: LP-PPA-gladky-anton-gnuplot) [amd64, i386] publishes {main: [snap3]: Pulled into 'snap2' with 'snap1' as source, pull request was: 'gnuplot-x11'} has been successfully switched to new source. diff --git a/system/t06_publish/S3Publish5Test_gold b/system/t06_publish/S3Publish5Test_gold index 0b8f635f..a1b531e5 100644 --- a/system/t06_publish/S3Publish5Test_gold +++ b/system/t06_publish/S3Publish5Test_gold @@ -1,4 +1,10 @@ +DBG S3: RemoveDirs 'dists/sq2' Cleaning up published repository s3:test1:./sq2... Cleaning up component 'main'... +DBG S3: Remove 'pool/main/b/boost-defaults/libboost-program-options-dev_1.62.0.1_i386.deb' +DBG S3: Remove 'pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc' +DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz' +DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc' +DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz' Published repository has been removed successfully. diff --git a/system/t06_publish/S3Publish6Test_gold b/system/t06_publish/S3Publish6Test_gold index cd68115c..cfa321d4 100644 --- a/system/t06_publish/S3Publish6Test_gold +++ b/system/t06_publish/S3Publish6Test_gold @@ -1,9 +1,52 @@ Loading packages... Generating metadata files and linking package files... Finalizing metadata files... +DBG S3: PutFile 'dists/maverick/main/Contents-i386.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Release.tmp' +DBG S3: PutFile 'dists/maverick/main/source/Release.tmp' +DBG S3: PutFile 'dists/maverick/Contents-i386.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/binary-i386/Packages.tmp.bz2' +DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp' +DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp.gz' +DBG S3: PutFile 'dists/maverick/main/source/Sources.tmp.bz2' +DBG S3: PutFile 'dists/maverick/Release.tmp' Signing file 'Release' with gpg, please enter your passphrase when prompted: +DBG S3: PutFile 'dists/maverick/Release.tmp.gpg' Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: +DBG S3: PutFile 'dists/maverick/InRelease.tmp' +DBG S3: RenameFile dists/maverick/InRelease.tmp -> dists/maverick/InRelease +DBG S3: Remove 'dists/maverick/InRelease.tmp' +DBG S3: RenameFile dists/maverick/main/source/Release.tmp -> dists/maverick/main/source/Release +DBG S3: Remove 'dists/maverick/main/source/Release.tmp' +DBG S3: RenameFile dists/maverick/Contents-i386.tmp.gz -> dists/maverick/Contents-i386.gz +DBG S3: Remove 'dists/maverick/Contents-i386.tmp.gz' +DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp -> dists/maverick/main/binary-i386/Packages +DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp' +DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.bz2 -> dists/maverick/main/binary-i386/Packages.bz2 +DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.bz2' +DBG S3: RenameFile dists/maverick/Release.tmp -> dists/maverick/Release +DBG S3: Remove 'dists/maverick/Release.tmp' +DBG S3: RenameFile dists/maverick/main/source/Sources.tmp.bz2 -> dists/maverick/main/source/Sources.bz2 +DBG S3: Remove 'dists/maverick/main/source/Sources.tmp.bz2' +DBG S3: RenameFile dists/maverick/Release.tmp.gpg -> dists/maverick/Release.gpg +DBG S3: Remove 'dists/maverick/Release.tmp.gpg' +DBG S3: RenameFile dists/maverick/main/Contents-i386.tmp.gz -> dists/maverick/main/Contents-i386.gz +DBG S3: Remove 'dists/maverick/main/Contents-i386.tmp.gz' +DBG S3: RenameFile dists/maverick/main/binary-i386/Release.tmp -> dists/maverick/main/binary-i386/Release +DBG S3: Remove 'dists/maverick/main/binary-i386/Release.tmp' +DBG S3: RenameFile dists/maverick/main/binary-i386/Packages.tmp.gz -> dists/maverick/main/binary-i386/Packages.gz +DBG S3: Remove 'dists/maverick/main/binary-i386/Packages.tmp.gz' +DBG S3: RenameFile dists/maverick/main/source/Sources.tmp -> dists/maverick/main/source/Sources +DBG S3: Remove 'dists/maverick/main/source/Sources.tmp' +DBG S3: RenameFile dists/maverick/main/source/Sources.tmp.gz -> dists/maverick/main/source/Sources.gz +DBG S3: Remove 'dists/maverick/main/source/Sources.tmp.gz' Cleaning up published repository s3:test1:./maverick... Cleaning up component 'main'... +DBG S3: Remove 'pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc' +DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz' +DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc' +DBG S3: Remove 'pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz' Published local repository s3:test1:./maverick [i386, source] publishes {main: [local-repo]} has been updated successfully. diff --git a/utils/logging.go b/utils/logging.go index 592e8f30..6eceae14 100644 --- a/utils/logging.go +++ b/utils/logging.go @@ -4,12 +4,19 @@ import ( "io" "os" "strings" + "syscall" "time" "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "golang.org/x/term" ) +// RunningOnTerminal checks whether stdout is terminal +func RunningOnTerminal() bool { + return term.IsTerminal(syscall.Stdout) +} + type LogWriter struct { Logger zerolog.Logger } @@ -32,11 +39,10 @@ func SetupDefaultLogger(levelStr string) { zerolog.MessageFieldName = "message" zerolog.LevelFieldName = "level" - log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}). - Level(GetLogLevelOrDebug(levelStr)). - With(). - Timestamp(). - Logger() + log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr, + FormatTimestamp: func(_ interface{}) string { return "" }, + NoColor: !RunningOnTerminal(), + }).Level(GetLogLevelOrDebug(levelStr)) } func GetLogLevelOrDebug(levelStr string) zerolog.Level {