Extract log utils into pkg/log
Docker-DCO-1.1-Signed-off-by: Josiah Kiehl <josiah@capoferro.net> (github: capoferro)
This commit is contained in:
parent
f5d12e100c
commit
6d4b3605f7
5 changed files with 123 additions and 7 deletions
|
@ -4,11 +4,11 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/jsonlog"
|
"github.com/docker/docker/pkg/jsonlog"
|
||||||
|
"github.com/docker/docker/pkg/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BroadcastWriter accumulate multiple io.WriteCloser by stream.
|
// BroadcastWriter accumulate multiple io.WriteCloser by stream.
|
||||||
|
@ -56,7 +56,7 @@ func (w *BroadcastWriter) Write(p []byte) (n int, err error) {
|
||||||
}
|
}
|
||||||
b, err := json.Marshal(jsonlog.JSONLog{Log: line, Stream: stream, Created: created})
|
b, err := json.Marshal(jsonlog.JSONLog{Log: line, Stream: stream, Created: created})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error making JSON log line: %s", err)
|
log.Errorf("Error making JSON log line: %s", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
b = append(b, '\n')
|
b = append(b, '\n')
|
||||||
|
|
|
@ -3,9 +3,10 @@ package httputils
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/docker/docker/pkg/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type resumableRequestReader struct {
|
type resumableRequestReader struct {
|
||||||
|
@ -71,7 +72,7 @@ func (r *resumableRequestReader) Read(p []byte) (n int, err error) {
|
||||||
r.cleanUpResponse()
|
r.cleanUpResponse()
|
||||||
}
|
}
|
||||||
if err != nil && err != io.EOF {
|
if err != nil && err != io.EOF {
|
||||||
log.Printf("encountered error during pull and clearing it before resume: %s", err)
|
log.Infof("encountered error during pull and clearing it before resume: %s", err)
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
return n, err
|
return n, err
|
||||||
|
|
77
log/log.go
Normal file
77
log/log.go
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
package log
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type priority int
|
||||||
|
|
||||||
|
const (
|
||||||
|
errorFormat = "[%s] %s:%d %s\n"
|
||||||
|
logFormat = "[%s] %s\n"
|
||||||
|
|
||||||
|
fatal priority = iota
|
||||||
|
error
|
||||||
|
info
|
||||||
|
debug
|
||||||
|
)
|
||||||
|
|
||||||
|
func (p priority) String() string {
|
||||||
|
switch p {
|
||||||
|
case fatal:
|
||||||
|
return "fatal"
|
||||||
|
case error:
|
||||||
|
return "error"
|
||||||
|
case info:
|
||||||
|
return "info"
|
||||||
|
case debug:
|
||||||
|
return "debug"
|
||||||
|
}
|
||||||
|
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Debug function, if the debug flag is set, then display. Do nothing otherwise
|
||||||
|
// If Docker is in damon mode, also send the debug info on the socket
|
||||||
|
func Debugf(format string, a ...interface{}) {
|
||||||
|
if os.Getenv("DEBUG") != "" {
|
||||||
|
logf(os.Stderr, debug, format, a...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Infof(format string, a ...interface{}) {
|
||||||
|
logf(os.Stdout, info, format, a...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Errorf(format string, a ...interface{}) {
|
||||||
|
logf(os.Stderr, error, format, a...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Fatalf(format string, a ...interface{}) {
|
||||||
|
logf(os.Stderr, fatal, format, a...)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func logf(stream io.Writer, level priority, format string, a ...interface{}) {
|
||||||
|
var prefix string
|
||||||
|
|
||||||
|
if level <= error || level == debug {
|
||||||
|
// Retrieve the stack infos
|
||||||
|
_, file, line, ok := runtime.Caller(2)
|
||||||
|
if !ok {
|
||||||
|
file = "<unknown>"
|
||||||
|
line = -1
|
||||||
|
} else {
|
||||||
|
file = file[strings.LastIndex(file, "/")+1:]
|
||||||
|
}
|
||||||
|
prefix = fmt.Sprintf(errorFormat, level.String(), file, line, format)
|
||||||
|
} else {
|
||||||
|
prefix = fmt.Sprintf(logFormat, level.String(), format)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Fprintf(stream, prefix, a...)
|
||||||
|
}
|
37
log/log_test.go
Normal file
37
log/log_test.go
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
package log
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestLogFatalf(t *testing.T) {
|
||||||
|
var output *bytes.Buffer
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
Level priority
|
||||||
|
Format string
|
||||||
|
Values []interface{}
|
||||||
|
ExpectedPattern string
|
||||||
|
}{
|
||||||
|
{fatal, "%d + %d = %d", []interface{}{1, 1, 2}, "\\[fatal\\] testing.go:\\d+ 1 \\+ 1 = 2"},
|
||||||
|
{error, "%d + %d = %d", []interface{}{1, 1, 2}, "\\[error\\] testing.go:\\d+ 1 \\+ 1 = 2"},
|
||||||
|
{info, "%d + %d = %d", []interface{}{1, 1, 2}, "\\[info\\] 1 \\+ 1 = 2"},
|
||||||
|
{debug, "%d + %d = %d", []interface{}{1, 1, 2}, "\\[debug\\] testing.go:\\d+ 1 \\+ 1 = 2"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, test := range tests {
|
||||||
|
output = &bytes.Buffer{}
|
||||||
|
logf(output, test.Level, test.Format, test.Values...)
|
||||||
|
|
||||||
|
expected := regexp.MustCompile(test.ExpectedPattern)
|
||||||
|
if !expected.MatchString(output.String()) {
|
||||||
|
t.Errorf("[%d] Log output does not match expected pattern:\n\tExpected: %s\n\tOutput: %s",
|
||||||
|
i,
|
||||||
|
expected.String(),
|
||||||
|
output.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,12 +7,13 @@ import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"hash"
|
"hash"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar"
|
"github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar"
|
||||||
|
|
||||||
|
"github.com/docker/docker/pkg/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type TarSum struct {
|
type TarSum struct {
|
||||||
|
@ -170,11 +171,11 @@ func (ts *TarSum) Sum(extra []byte) string {
|
||||||
h.Write(extra)
|
h.Write(extra)
|
||||||
}
|
}
|
||||||
for _, sum := range sums {
|
for _, sum := range sums {
|
||||||
log.Printf("-->%s<--", sum)
|
log.Infof("-->%s<--", sum)
|
||||||
h.Write([]byte(sum))
|
h.Write([]byte(sum))
|
||||||
}
|
}
|
||||||
checksum := "tarsum+sha256:" + hex.EncodeToString(h.Sum(nil))
|
checksum := "tarsum+sha256:" + hex.EncodeToString(h.Sum(nil))
|
||||||
log.Printf("checksum processed: %s", checksum)
|
log.Infof("checksum processed: %s", checksum)
|
||||||
return checksum
|
return checksum
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue