From 6930e4d668f9f171a8b575d1d418256ac2a341e7 Mon Sep 17 00:00:00 2001 From: "Anand Babu (AB) Periasamy" Date: Wed, 9 Sep 2015 20:28:09 -0700 Subject: [PATCH] logrus logger --- pkg/server/api/bucket-handlers.go | 15 +- pkg/server/api/logging-handlers.go | 4 +- pkg/server/api/object-handlers.go | 19 +- pkg/utils/log/log.go | 391 ----------------------------- vendor.json | 7 + 5 files changed, 24 insertions(+), 412 deletions(-) delete mode 100644 pkg/utils/log/log.go diff --git a/pkg/server/api/bucket-handlers.go b/pkg/server/api/bucket-handlers.go index 0c7c0258b..f2f709f37 100644 --- a/pkg/server/api/bucket-handlers.go +++ b/pkg/server/api/bucket-handlers.go @@ -22,7 +22,6 @@ import ( "github.com/gorilla/mux" "github.com/minio/minio/pkg/donut" "github.com/minio/minio/pkg/probe" - "github.com/minio/minio/pkg/utils/log" ) func (api Minio) isValidOp(w http.ResponseWriter, req *http.Request, acceptsContentType contentType) bool { @@ -55,7 +54,7 @@ func (api Minio) isValidOp(w http.ResponseWriter, req *http.Request, acceptsCont writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path) return false default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) return false } @@ -123,7 +122,7 @@ func (api Minio) ListMultipartUploadsHandler(w http.ResponseWriter, req *http.Re case donut.BucketNotFound: writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -200,7 +199,7 @@ func (api Minio) ListObjectsHandler(w http.ResponseWriter, req *http.Request) { case donut.ObjectNameInvalid: writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -253,7 +252,7 @@ func (api Minio) ListBucketsHandler(w http.ResponseWriter, req *http.Request) { case donut.SignatureDoesNotMatch: writeErrorResponse(w, req, SignatureDoesNotMatch, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -331,7 +330,7 @@ func (api Minio) PutBucketHandler(w http.ResponseWriter, req *http.Request) { case donut.BucketExists: writeErrorResponse(w, req, BucketAlreadyExists, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -385,7 +384,7 @@ func (api Minio) PutBucketACLHandler(w http.ResponseWriter, req *http.Request) { case donut.BucketNotFound: writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -435,7 +434,7 @@ func (api Minio) HeadBucketHandler(w http.ResponseWriter, req *http.Request) { case donut.BucketNameInvalid: writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } diff --git a/pkg/server/api/logging-handlers.go b/pkg/server/api/logging-handlers.go index 0af3b6422..7b7b365f5 100644 --- a/pkg/server/api/logging-handlers.go +++ b/pkg/server/api/logging-handlers.go @@ -23,8 +23,6 @@ import ( "net/http" "os" "time" - - "github.com/minio/minio/pkg/utils/log" ) type logHandler struct { @@ -103,7 +101,7 @@ func fileLogger(filename string) (chan<- []byte, error) { go func() { for message := range ch { if _, err := io.Copy(file, bytes.NewBuffer(message)); err != nil { - log.Errorln(err) + // log.Errorln(err) } } }() diff --git a/pkg/server/api/object-handlers.go b/pkg/server/api/object-handlers.go index eba76f81a..713ca871f 100644 --- a/pkg/server/api/object-handlers.go +++ b/pkg/server/api/object-handlers.go @@ -23,7 +23,6 @@ import ( "github.com/gorilla/mux" "github.com/minio/minio/pkg/donut" "github.com/minio/minio/pkg/probe" - "github.com/minio/minio/pkg/utils/log" ) const ( @@ -76,7 +75,7 @@ func (api Minio) GetObjectHandler(w http.ResponseWriter, req *http.Request) { setObjectHeaders(w, metadata, hrange) if _, err = api.Donut.GetObject(w, bucket, object, hrange.start, hrange.length); err != nil { // unable to write headers, we've already printed data. Just close the connection. - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) return } return @@ -93,7 +92,7 @@ func (api Minio) GetObjectHandler(w http.ResponseWriter, req *http.Request) { case donut.ObjectNameInvalid: writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -150,7 +149,7 @@ func (api Minio) HeadObjectHandler(w http.ResponseWriter, req *http.Request) { case donut.ObjectNameInvalid: writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -252,7 +251,7 @@ func (api Minio) PutObjectHandler(w http.ResponseWriter, req *http.Request) { case donut.InvalidDigest: writeErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -312,7 +311,7 @@ func (api Minio) NewMultipartUploadHandler(w http.ResponseWriter, req *http.Requ case donut.ObjectExists: writeErrorResponse(w, req, MethodNotAllowed, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -412,7 +411,7 @@ func (api Minio) PutObjectPartHandler(w http.ResponseWriter, req *http.Request) case donut.InvalidDigest: writeErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -462,7 +461,7 @@ func (api Minio) AbortMultipartUploadHandler(w http.ResponseWriter, req *http.Re case donut.InvalidUploadID: writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -527,7 +526,7 @@ func (api Minio) ListObjectPartsHandler(w http.ResponseWriter, req *http.Request case donut.InvalidUploadID: writeErrorResponse(w, req, NoSuchUpload, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } @@ -590,7 +589,7 @@ func (api Minio) CompleteMultipartUploadHandler(w http.ResponseWriter, req *http case donut.MalformedXML: writeErrorResponse(w, req, MalformedXML, acceptsContentType, req.URL.Path) default: - log.Error.Println(err.Trace()) + // log.Error.Println(err.Trace()) writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) } } diff --git a/pkg/utils/log/log.go b/pkg/utils/log/log.go deleted file mode 100644 index 9c77c1ff0..000000000 --- a/pkg/utils/log/log.go +++ /dev/null @@ -1,391 +0,0 @@ -// -// Minio Cloud Storage, (C) 2015 Minio, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. -// Golang project: -// https://github.com/golang/go/blob/master/LICENSE - -// Using this part of Minio codebase under the license -// Apache License Version 2.0 with modifications - -// Package log implements a simple logging package. It defines a type, Logger, -// with methods for formatting output. It also has a predefined 'standard' -// Logger accessible through helper functions Print[f|ln], Fatal[f|ln], and -// Panic[f|ln], which are easier to use than creating a Logger manually. -// That logger writes to standard error and prints the date and time -// of each logged message. -// The Fatal functions call os.Exit(1) after writing the log message. -// The Panic functions call panic after writing the log message. -package log - -import ( - "fmt" - "io" - "os" - "runtime" - "sync" - "time" -) - -// These flags define which text to prefix to each log entry generated by the Logger. -// Bits or'ed together to control what's printed. There is no control over the -// order they appear (the order listed here) or the format they present (as -// described in the comments). A colon appears after these items: -// 2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message -const ( - Ldate = 1 << iota // the date: 2009/01/23 - Ltime - Lmicroseconds // microsecond resolution: 01:23:23.123123. assumes Ltime. - Llongfile // full file name and line number: /a/b/c/d.go:23 - Lshortfile // final file name element and line number: d.go:23. overrides Llongfile - LstdFlags = Ldate | Ltime // initial values for the standard logger -) - -// A Logger represents an active logging object that generates lines of -// output to an io.Writer. Each logging operation makes a single call to -// the Writer's Write method. A Logger can be used simultaneously from -// multiple goroutines; it guarantees to serialize access to the Writer. -type Logger struct { - mu sync.Mutex // ensures atomic writes; protects the following fields - prefix string // prefix to write at beginning of each line - flag int // properties - out io.Writer // destination for output - buf []byte // for accumulating text to write -} - -// New creates a new Logger. The out variable sets the -// destination to which log data will be written. -// The prefix appears at the beginning of each generated log line. -// The flag argument defines the logging properties. -func New(out io.Writer, prefix string, flag int) *Logger { - return &Logger{out: out, prefix: prefix, flag: flag} -} - -var std = New(os.Stderr, "", LstdFlags) - -// Error is an error logger -var Error = New(os.Stderr, "", 0) - -// Debug is an error logger -var Debug = New(os.Stderr, "", 0) - -// Trace is an error logger -var Trace = New(os.Stderr, "", 0) - -// Cheap integer to fixed-width decimal ASCII. Give a negative width to avoid zero-padding. -// Knows the buffer has capacity. -func itoa(buf *[]byte, i int, wid int) { - var u = uint(i) - if u == 0 && wid <= 1 { - *buf = append(*buf, '0') - return - } - - // Assemble decimal in reverse order. - var b [32]byte - bp := len(b) - for ; u > 0 || wid > 0; u /= 10 { - bp-- - wid-- - b[bp] = byte(u%10) + '0' - } - *buf = append(*buf, b[bp:]...) -} - -func (l *Logger) formatHeader(buf *[]byte, t time.Time, file string, line int) { - *buf = append(*buf, l.prefix...) - if l.flag&(Ldate|Ltime|Lmicroseconds) != 0 { - if l.flag&Ldate != 0 { - year, month, day := t.Date() - itoa(buf, year, 4) - *buf = append(*buf, '/') - itoa(buf, int(month), 2) - *buf = append(*buf, '/') - itoa(buf, day, 2) - *buf = append(*buf, ' ') - } - if l.flag&(Ltime|Lmicroseconds) != 0 { - hour, min, sec := t.Clock() - itoa(buf, hour, 2) - *buf = append(*buf, ':') - itoa(buf, min, 2) - *buf = append(*buf, ':') - itoa(buf, sec, 2) - if l.flag&Lmicroseconds != 0 { - *buf = append(*buf, '.') - itoa(buf, t.Nanosecond()/1e3, 6) - } - *buf = append(*buf, ' ') - } - } - if l.flag&(Lshortfile|Llongfile) != 0 { - if l.flag&Lshortfile != 0 { - short := file - for i := len(file) - 1; i > 0; i-- { - if file[i] == '/' { - short = file[i+1:] - break - } - } - file = short - } - *buf = append(*buf, file...) - *buf = append(*buf, ':') - itoa(buf, line, -1) - *buf = append(*buf, ": "...) - } -} - -// Output writes the output for a logging event. The string s contains -// the text to print after the prefix specified by the flags of the -// Logger. A newline is appended if the last character of s is not -// already a newline. Calldepth is used to recover the PC and is -// provided for generality, although at the moment on all pre-defined -// paths it will be 2. -func (l *Logger) Output(calldepth int, s string) error { - now := time.Now() // get this early. - var file string - var line int - l.mu.Lock() - defer l.mu.Unlock() - if l.flag&(Lshortfile|Llongfile) != 0 { - // release lock while getting caller info - it's expensive. - l.mu.Unlock() - var ok bool - _, file, line, ok = runtime.Caller(calldepth) - if !ok { - file = "???" - line = 0 - } - l.mu.Lock() - } - l.buf = l.buf[:0] - l.formatHeader(&l.buf, now, file, line) - l.buf = append(l.buf, s...) - if len(s) > 0 && s[len(s)-1] != '\n' { - l.buf = append(l.buf, '\n') - } - _, err := l.out.Write(l.buf) - return err -} - -// Printf calls l.Output to print to the logger. -// Arguments are handled in the manner of fmt.Printf. -func (l *Logger) Printf(format string, v ...interface{}) { - l.Output(2, fmt.Sprintf(format, v...)) -} - -// Print calls l.Output to print to the logger. -// Arguments are handled in the manner of fmt.Print. -func (l *Logger) Print(v ...interface{}) { - l.Output(2, fmt.Sprint(v...)) -} - -// Println calls l.Output to print to the logger. -// Arguments are handled in the manner of fmt.Println. -func (l *Logger) Println(v ...interface{}) { - l.Output(2, fmt.Sprintln(v...)) -} - -// Fatal is equivalent to l.Print() followed by a call to os.Exit(1). -func (l *Logger) Fatal(v ...interface{}) { - l.SetPrefix("FATAL:") - l.Output(2, fmt.Sprint(v...)) - os.Exit(1) -} - -// Fatalf is equivalent to l.Printf() followed by a call to os.Exit(1). -func (l *Logger) Fatalf(format string, v ...interface{}) { - l.SetPrefix("FATAL:") - l.Output(2, fmt.Sprintf(format, v...)) - os.Exit(1) -} - -// Fatalln is equivalent to l.Println() followed by a call to os.Exit(1). -func (l *Logger) Fatalln(v ...interface{}) { - l.SetPrefix("FATAL:") - l.Output(2, fmt.Sprintln(v...)) - os.Exit(1) -} - -// Error is equivalent to l.Print() followed by a call to os.Exit(1). -func (l *Logger) Error(v ...interface{}) { - l.SetPrefix("ERROR:") - l.Output(2, fmt.Sprint(v...)) -} - -// Errorf is equivalent to l.Printf() followed by a call to os.Exit(1). -func (l *Logger) Errorf(format string, v ...interface{}) { - l.SetPrefix("ERROR:") - l.Output(2, fmt.Sprintf(format, v...)) -} - -// Errorln is equivalent to l.Println() followed by a call to os.Exit(1). -func (l *Logger) Errorln(v ...interface{}) { - l.SetPrefix("ERROR:") - l.Output(2, fmt.Sprintln(v...)) -} - -// Panic is equivalent to l.Print() followed by a call to panic(). -func (l *Logger) Panic(v ...interface{}) { - s := fmt.Sprint(v...) - l.Output(2, s) - panic(s) -} - -// Panicf is equivalent to l.Printf() followed by a call to panic(). -func (l *Logger) Panicf(format string, v ...interface{}) { - s := fmt.Sprintf(format, v...) - l.Output(2, s) - panic(s) -} - -// Panicln is equivalent to l.Println() followed by a call to panic(). -func (l *Logger) Panicln(v ...interface{}) { - s := fmt.Sprintln(v...) - l.Output(2, s) - panic(s) -} - -// Flags returns the output flags for the logger. -func (l *Logger) Flags() int { - l.mu.Lock() - defer l.mu.Unlock() - return l.flag -} - -// SetFlags sets the output flags for the logger. -func (l *Logger) SetFlags(flag int) { - l.mu.Lock() - defer l.mu.Unlock() - l.flag = flag -} - -// Prefix returns the output prefix for the logger. -func (l *Logger) Prefix() string { - l.mu.Lock() - defer l.mu.Unlock() - return l.prefix -} - -// SetPrefix sets the output prefix for the logger. -func (l *Logger) SetPrefix(prefix string) { - l.mu.Lock() - defer l.mu.Unlock() - l.prefix = prefix -} - -// SetOutput sets the output destination for the standard logger. -func SetOutput(w io.Writer) { - std.mu.Lock() - defer std.mu.Unlock() - std.out = w -} - -// Flags returns the output flags for the standard logger. -func Flags() int { - return std.Flags() -} - -// SetFlags sets the output flags for the standard logger. -func SetFlags(flag int) { - std.SetFlags(flag) -} - -// Prefix returns the output prefix for the standard logger. -func Prefix() string { - return std.Prefix() -} - -// SetPrefix sets the output prefix for the standard logger. -func SetPrefix(prefix string) { - std.SetPrefix(prefix) -} - -// These functions write to the standard logger. - -// Print calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Print. -func Print(v ...interface{}) { - std.Output(2, fmt.Sprint(v...)) -} - -// Printf calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Printf. -func Printf(format string, v ...interface{}) { - std.Output(2, fmt.Sprintf(format, v...)) -} - -// Println calls Output to print to the standard logger. -// Arguments are handled in the manner of fmt.Println. -func Println(v ...interface{}) { - std.Output(2, fmt.Sprintln(v...)) -} - -// Fatal is equivalent to Print() followed by a call to os.Exit(1). -func Fatal(v ...interface{}) { - std.SetPrefix("FATAL:") - std.Output(2, fmt.Sprint(v...)) - os.Exit(1) -} - -// Fatalf is equivalent to Printf() followed by a call to os.Exit(1). -func Fatalf(format string, v ...interface{}) { - std.SetPrefix("FATAL:") - std.Output(2, fmt.Sprintf(format, v...)) - os.Exit(1) -} - -// Fatalln is equivalent to Println() followed by a call to os.Exit(1). -func Fatalln(v ...interface{}) { - std.SetPrefix("FATAL:") - std.Output(2, fmt.Sprintln(v...)) - os.Exit(1) -} - -// Errorf is equivalent to Printf() followed by a call to os.Exit(1). -func Errorf(format string, v ...interface{}) { - std.SetPrefix("ERROR:") - std.Output(2, fmt.Sprintf(format, v...)) -} - -// Errorln is equivalent to Println() followed by a call to os.Exit(1). -func Errorln(v ...interface{}) { - std.SetPrefix("ERROR:") - std.Output(2, fmt.Sprintln(v...)) -} - -// Panic is equivalent to Print() followed by a call to panic(). -func Panic(v ...interface{}) { - s := fmt.Sprint(v...) - std.Output(2, s) - panic(s) -} - -// Panicf is equivalent to Printf() followed by a call to panic(). -func Panicf(format string, v ...interface{}) { - s := fmt.Sprintf(format, v...) - std.Output(2, s) - panic(s) -} - -// Panicln is equivalent to Println() followed by a call to panic(). -func Panicln(v ...interface{}) { - s := fmt.Sprintln(v...) - std.Output(2, s) - panic(s) -} diff --git a/vendor.json b/vendor.json index 01e81e1bb..38f3ec143 100755 --- a/vendor.json +++ b/vendor.json @@ -2,6 +2,13 @@ "comment": "", "ignore": "", "package": [ + { + "canonical": "github.com/Sirupsen/logrus", + "comment": "", + "local": "vendor/github.com/Sirupsen/logrus", + "revision": "418b41d23a1bf978c06faea5313ba194650ac088", + "revisionTime": "2015-09-08T20:46:18Z" + }, { "canonical": "github.com/dustin/go-humanize", "comment": "",