|
|
@@ -3,6 +3,7 @@ package pack
|
|
|
import (
|
|
|
"fmt"
|
|
|
"io"
|
|
|
+ "io/ioutil"
|
|
|
"log"
|
|
|
"os"
|
|
|
"strings"
|
|
|
@@ -11,13 +12,20 @@ import (
|
|
|
)
|
|
|
|
|
|
type packLogger struct {
|
|
|
- out *log.Logger
|
|
|
+ outDiscard *log.Logger
|
|
|
+ outStderr *log.Logger
|
|
|
+ safeWriter *safeWriter
|
|
|
}
|
|
|
|
|
|
// Replicate the exact behavior of https://github.com/buildpacks/pack/blob/main/pkg/logging/logger_simple.go
|
|
|
func newPackLogger() logging.Logger {
|
|
|
+ discard := log.New(ioutil.Discard, "", log.LstdFlags|log.Lmicroseconds)
|
|
|
+ stderr := log.New(os.Stderr, "", log.LstdFlags|log.Lmicroseconds)
|
|
|
+
|
|
|
return &packLogger{
|
|
|
- out: log.New(os.Stderr, "", log.LstdFlags|log.Lmicroseconds),
|
|
|
+ outDiscard: discard,
|
|
|
+ outStderr: stderr,
|
|
|
+ safeWriter: &safeWriter{discard, stderr},
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -30,7 +38,7 @@ const (
|
|
|
)
|
|
|
|
|
|
func (l *packLogger) Debug(msg string) {
|
|
|
- l.out.Printf(prefixFmt, debugPrefix, msg)
|
|
|
+ l.outStderr.Printf(prefixFmt, debugPrefix, msg)
|
|
|
}
|
|
|
|
|
|
func (l *packLogger) Debugf(format string, v ...interface{}) {
|
|
|
@@ -46,35 +54,48 @@ func (l *packLogger) Debugf(format string, v ...interface{}) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- l.out.Printf(prefixFmt, debugPrefix, fmt.Sprintf(format, v...))
|
|
|
+ l.outStderr.Printf(prefixFmt, debugPrefix, fmt.Sprintf(format, v...))
|
|
|
}
|
|
|
|
|
|
func (l *packLogger) Info(msg string) {
|
|
|
- l.out.Printf(prefixFmt, infoPrefix, msg)
|
|
|
+ l.outStderr.Printf(prefixFmt, infoPrefix, msg)
|
|
|
}
|
|
|
|
|
|
func (l *packLogger) Infof(format string, v ...interface{}) {
|
|
|
- l.out.Printf(prefixFmt, infoPrefix, fmt.Sprintf(format, v...))
|
|
|
+ l.outStderr.Printf(prefixFmt, infoPrefix, fmt.Sprintf(format, v...))
|
|
|
}
|
|
|
|
|
|
func (l *packLogger) Warn(msg string) {
|
|
|
- l.out.Printf(prefixFmt, warnPrefix, msg)
|
|
|
+ l.outStderr.Printf(prefixFmt, warnPrefix, msg)
|
|
|
}
|
|
|
|
|
|
func (l *packLogger) Warnf(format string, v ...interface{}) {
|
|
|
- l.out.Printf(prefixFmt, warnPrefix, fmt.Sprintf(format, v...))
|
|
|
+ l.outStderr.Printf(prefixFmt, warnPrefix, fmt.Sprintf(format, v...))
|
|
|
}
|
|
|
|
|
|
func (l *packLogger) Error(msg string) {
|
|
|
- l.out.Printf(prefixFmt, errorPrefix, msg)
|
|
|
+ l.outStderr.Printf(prefixFmt, errorPrefix, msg)
|
|
|
}
|
|
|
|
|
|
func (l *packLogger) Errorf(format string, v ...interface{}) {
|
|
|
- l.out.Printf(prefixFmt, errorPrefix, fmt.Sprintf(format, v...))
|
|
|
+ l.outStderr.Printf(prefixFmt, errorPrefix, fmt.Sprintf(format, v...))
|
|
|
+}
|
|
|
+
|
|
|
+type safeWriter struct {
|
|
|
+ outDiscard *log.Logger
|
|
|
+ outStderr *log.Logger
|
|
|
+}
|
|
|
+
|
|
|
+func (s *safeWriter) Write(p []byte) (n int, err error) {
|
|
|
+ if strings.Contains(string(p), "Unable to delete previous cache image") {
|
|
|
+ return s.outDiscard.Writer().Write(p)
|
|
|
+ }
|
|
|
+
|
|
|
+ return s.outStderr.Writer().Write(p)
|
|
|
}
|
|
|
|
|
|
func (l *packLogger) Writer() io.Writer {
|
|
|
- return l.out.Writer()
|
|
|
+ return l.safeWriter
|
|
|
}
|
|
|
|
|
|
func (l *packLogger) IsVerbose() bool {
|