s3: add debug logs for commands

* initialize zerolog for commands
* Change default log format: remote colors and timestamp
This commit is contained in:
André Roth
2025-04-21 23:19:32 +02:00
parent e447fc0f1e
commit c07bf2b108
11 changed files with 188 additions and 25 deletions

View File

@@ -2,7 +2,6 @@ package api
import ( import (
"net/http" "net/http"
"os"
"sync/atomic" "sync/atomic"
"github.com/aptly-dev/aptly/aptly" "github.com/aptly-dev/aptly/aptly"
@@ -56,13 +55,9 @@ func Router(c *ctx.AptlyContext) http.Handler {
router.UseRawPath = true router.UseRawPath = true
if c.Config().LogFormat == "json" { if c.Config().LogFormat == "json" {
c.StructuredLogging(true)
utils.SetupJSONLogger(c.Config().LogLevel, os.Stdout)
gin.DefaultWriter = utils.LogWriter{Logger: log.Logger} gin.DefaultWriter = utils.LogWriter{Logger: log.Logger}
router.Use(JSONLogger()) router.Use(JSONLogger())
} else { } else {
c.StructuredLogging(false)
utils.SetupDefaultLogger(c.Config().LogLevel)
router.Use(gin.Logger()) router.Use(gin.Logger())
} }

View File

@@ -6,6 +6,7 @@ import (
"strings" "strings"
"github.com/aptly-dev/aptly/aptly" "github.com/aptly-dev/aptly/aptly"
"github.com/aptly-dev/aptly/utils"
"github.com/cheggaaa/pb" "github.com/cheggaaa/pb"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
"github.com/wsxiaoys/terminal/color" "github.com/wsxiaoys/terminal/color"
@@ -78,7 +79,7 @@ func (p *Progress) InitBar(count int64, isBytes bool, _ aptly.BarType) {
if p.bar != nil { if p.bar != nil {
panic("bar already initialized") panic("bar already initialized")
} }
if RunningOnTerminal() { if utils.RunningOnTerminal() {
p.bar = pb.New(0) p.bar = pb.New(0)
p.bar.Total = count p.bar.Total = count
p.bar.NotPrint = true p.bar.NotPrint = true
@@ -141,7 +142,7 @@ func (p *Progress) PrintfStdErr(msg string, a ...interface{}) {
// ColoredPrintf does printf in colored way + newline // ColoredPrintf does printf in colored way + newline
func (p *Progress) ColoredPrintf(msg string, a ...interface{}) { func (p *Progress) ColoredPrintf(msg string, a ...interface{}) {
if RunningOnTerminal() { if utils.RunningOnTerminal() {
p.queue <- printTask{code: codePrint, message: color.Sprintf(msg, a...) + "\n"} p.queue <- printTask{code: codePrint, message: color.Sprintf(msg, a...) + "\n"}
} else { } else {
// stip color marks // stip color marks

View File

@@ -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)
}

View File

@@ -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 context.configLoaded = true
} }

View File

@@ -172,6 +172,7 @@ func (storage *PublishedStorage) PutFile(path string, sourceFilename string) err
} }
defer source.Close() defer source.Close()
log.Debug().Msgf("S3: PutFile '%s'", path)
err = storage.putFile(path, source, "") err = storage.putFile(path, source, "")
if err != nil { if err != nil {
err = errors.Wrap(err, fmt.Sprintf("error uploading %s to %s", sourceFilename, storage)) 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 // putFile uploads file-like object to
func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker, sourceMD5 string) error { func (storage *PublishedStorage) putFile(path string, source io.ReadSeeker, sourceMD5 string) error {
params := &s3.PutObjectInput{ params := &s3.PutObjectInput{
Bucket: aws.String(storage.bucket), Bucket: aws.String(storage.bucket),
Key: aws.String(filepath.Join(storage.prefix, path)), 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)), 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 { if _, err := storage.s3.DeleteObject(context.TODO(), params); err != nil {
var notFoundErr *smithy.GenericAPIError var notFoundErr *smithy.GenericAPIError
if errors.As(err, &notFoundErr) && notFoundErr.Code == "NoSuchBucket" { if errors.As(err, &notFoundErr) && notFoundErr.Code == "NoSuchBucket" {
@@ -270,6 +271,7 @@ func (storage *PublishedStorage) RemoveDirs(path string, _ aptly.Progress) error
return err return err
} }
log.Debug().Msgf("S3: RemoveDirs '%s'", path)
if storage.disableMultiDel { if storage.disableMultiDel {
for i := range filelist { for i := range filelist {
params := &s3.DeleteObjectInput{ params := &s3.DeleteObjectInput{
@@ -385,6 +387,7 @@ func (storage *PublishedStorage) LinkFromPool(publishedPrefix, publishedRelPath,
} }
defer source.Close() defer source.Close()
log.Debug().Msgf("S3: LinkFromPool '%s'", relPath)
err = storage.putFile(relPath, source, sourceMD5) err = storage.putFile(relPath, source, sourceMD5)
if err == nil { if err == nil {
storage.pathCache[relPath] = sourceMD5 storage.pathCache[relPath] = sourceMD5
@@ -465,6 +468,7 @@ func (storage *PublishedStorage) RenameFile(oldName, newName string) error {
params.ServerSideEncryption = storage.encryptionMethod params.ServerSideEncryption = storage.encryptionMethod
} }
log.Debug().Msgf("S3: RenameFile %s -> %s", oldName, newName)
_, err := storage.s3.CopyObject(context.TODO(), params) _, err := storage.s3.CopyObject(context.TODO(), params)
if err != nil { if err != nil {
return fmt.Errorf("error copying %s -> %s in %s: %s", oldName, newName, storage, err) 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) params.ServerSideEncryption = types.ServerSideEncryption(storage.encryptionMethod)
} }
log.Debug().Msgf("S3: SymLink %s -> %s", src, dst)
_, err := storage.s3.CopyObject(context.TODO(), params) _, err := storage.s3.CopyObject(context.TODO(), params)
if err != nil { if err != nil {
return fmt.Errorf("error symlinking %s -> %s in %s: %s", src, dst, storage, err) 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 // HardLink using symlink functionality as hard links do not exist
func (storage *PublishedStorage) HardLink(src string, dst string) error { func (storage *PublishedStorage) HardLink(src string, dst string) error {
log.Debug().Msgf("S3: HardLink %s -> %s", src, dst)
return storage.SymLink(src, dst) return storage.SymLink(src, dst)
} }

View File

@@ -1,8 +1,26 @@
Loading packages... Loading packages...
Generating metadata files and linking package files... 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... 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: 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: 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. Local repo local-repo has been successfully published.
Now you can add following line to apt sources: Now you can add following line to apt sources:

View File

@@ -1,9 +1,52 @@
Loading packages... Loading packages...
Generating metadata files and linking package files... Generating metadata files and linking package files...
Finalizing metadata 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: 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: 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 published repository s3:test1:./maverick...
Cleaning up component 'main'... 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. Published local repository s3:test1:./maverick [i386, source] publishes {main: [local-repo]} has been updated successfully.

View File

@@ -1,9 +1,58 @@
Loading packages... Loading packages...
Generating metadata files and linking package files... Generating metadata files and linking package files...
Finalizing metadata 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: 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: 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 published repository s3:test1:./maverick...
Cleaning up component 'main'... 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. 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.

View File

@@ -1,4 +1,10 @@
DBG S3: RemoveDirs 'dists/sq2'
Cleaning up published repository s3:test1:./sq2... Cleaning up published repository s3:test1:./sq2...
Cleaning up component 'main'... 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. Published repository has been removed successfully.

View File

@@ -1,9 +1,52 @@
Loading packages... Loading packages...
Generating metadata files and linking package files... Generating metadata files and linking package files...
Finalizing metadata 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: 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: 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 published repository s3:test1:./maverick...
Cleaning up component 'main'... 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. Published local repository s3:test1:./maverick [i386, source] publishes {main: [local-repo]} has been updated successfully.

View File

@@ -4,12 +4,19 @@ import (
"io" "io"
"os" "os"
"strings" "strings"
"syscall"
"time" "time"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"github.com/rs/zerolog/log" "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 { type LogWriter struct {
Logger zerolog.Logger Logger zerolog.Logger
} }
@@ -32,11 +39,10 @@ func SetupDefaultLogger(levelStr string) {
zerolog.MessageFieldName = "message" zerolog.MessageFieldName = "message"
zerolog.LevelFieldName = "level" zerolog.LevelFieldName = "level"
log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339}). log.Logger = zerolog.New(zerolog.ConsoleWriter{Out: os.Stderr,
Level(GetLogLevelOrDebug(levelStr)). FormatTimestamp: func(_ interface{}) string { return "" },
With(). NoColor: !RunningOnTerminal(),
Timestamp(). }).Level(GetLogLevelOrDebug(levelStr))
Logger()
} }
func GetLogLevelOrDebug(levelStr string) zerolog.Level { func GetLogLevelOrDebug(levelStr string) zerolog.Level {