Merge pull request #164 from greut/go-logr-v0.2.0

feat use go-logr v0.2.0
diff --git a/go.mod b/go.mod
index f50b258..e396e31 100644
--- a/go.mod
+++ b/go.mod
@@ -2,4 +2,4 @@
 
 go 1.13
 
-require github.com/go-logr/logr v0.1.0
+require github.com/go-logr/logr v0.2.0
diff --git a/go.sum b/go.sum
index fb64d27..8dfa785 100644
--- a/go.sum
+++ b/go.sum
@@ -1,2 +1,2 @@
-github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg=
-github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
diff --git a/klog.go b/klog.go
index d339ea8..b0091f4 100644
--- a/klog.go
+++ b/klog.go
@@ -687,7 +687,7 @@
 	return copy(buf.tmp[i:], buf.tmp[j:])
 }
 
-func (l *loggingT) println(s severity, logr logr.InfoLogger, args ...interface{}) {
+func (l *loggingT) println(s severity, logr logr.Logger, args ...interface{}) {
 	buf, file, line := l.header(s, 0)
 	// if logr is set, we clear the generated header as we rely on the backing
 	// logr implementation to print headers
@@ -699,11 +699,11 @@
 	l.output(s, logr, buf, file, line, false)
 }
 
-func (l *loggingT) print(s severity, logr logr.InfoLogger, args ...interface{}) {
+func (l *loggingT) print(s severity, logr logr.Logger, args ...interface{}) {
 	l.printDepth(s, logr, 1, args...)
 }
 
-func (l *loggingT) printDepth(s severity, logr logr.InfoLogger, depth int, args ...interface{}) {
+func (l *loggingT) printDepth(s severity, logr logr.Logger, depth int, args ...interface{}) {
 	buf, file, line := l.header(s, depth)
 	// if logr is set, we clear the generated header as we rely on the backing
 	// logr implementation to print headers
@@ -718,7 +718,7 @@
 	l.output(s, logr, buf, file, line, false)
 }
 
-func (l *loggingT) printf(s severity, logr logr.InfoLogger, format string, args ...interface{}) {
+func (l *loggingT) printf(s severity, logr logr.Logger, format string, args ...interface{}) {
 	buf, file, line := l.header(s, 0)
 	// if logr is set, we clear the generated header as we rely on the backing
 	// logr implementation to print headers
@@ -736,7 +736,7 @@
 // printWithFileLine behaves like print but uses the provided file and line number.  If
 // alsoLogToStderr is true, the log message always appears on standard error; it
 // will also appear in the log file unless --logtostderr is set.
-func (l *loggingT) printWithFileLine(s severity, logr logr.InfoLogger, file string, line int, alsoToStderr bool, args ...interface{}) {
+func (l *loggingT) printWithFileLine(s severity, logr logr.Logger, file string, line int, alsoToStderr bool, args ...interface{}) {
 	buf := l.formatHeader(s, file, line)
 	// if logr is set, we clear the generated header as we rely on the backing
 	// logr implementation to print headers
@@ -761,7 +761,7 @@
 }
 
 // if loggr is specified, will call loggr.Info, otherwise output with logging module.
-func (l *loggingT) infoS(loggr logr.InfoLogger, msg string, keysAndValues ...interface{}) {
+func (l *loggingT) infoS(loggr logr.Logger, msg string, keysAndValues ...interface{}) {
 	if loggr != nil {
 		loggr.Info(msg, keysAndValues)
 		return
@@ -878,7 +878,7 @@
 }
 
 // output writes the data to the log files and releases the buffer.
-func (l *loggingT) output(s severity, log logr.InfoLogger, buf *buffer, file string, line int, alsoToStderr bool) {
+func (l *loggingT) output(s severity, log logr.Logger, buf *buffer, file string, line int, alsoToStderr bool) {
 	l.mu.Lock()
 	if l.traceLocation.isSet() {
 		if l.traceLocation.match(file, line) {
@@ -1231,7 +1231,7 @@
 // See the documentation of V for more information.
 type Verbose struct {
 	enabled bool
-	logr    logr.InfoLogger
+	logr    logr.Logger
 }
 
 func newVerbose(level Level, b bool) Verbose {
@@ -1324,6 +1324,14 @@
 	}
 }
 
+// Error is equivalent to the global Error function, guarded by the value of v.
+// See the documentation of V for usage.
+func (v Verbose) Error(err error, msg string, args ...interface{}) {
+	if v.enabled {
+		logging.errorS(err, v.logr, msg, args...)
+	}
+}
+
 // Info logs to the INFO log.
 // Arguments are handled in the manner of fmt.Print; a newline is appended if missing.
 func Info(args ...interface{}) {
diff --git a/klogr/klogr.go b/klogr/klogr.go
index 9791cd8..227d07b 100644
--- a/klogr/klogr.go
+++ b/klogr/klogr.go
@@ -174,7 +174,7 @@
 	klog.ErrorDepth(framesToCaller(), l.prefix, " ", msgStr, " ", errStr, " ", fixedStr, " ", userStr)
 }
 
-func (l klogger) V(level int) logr.InfoLogger {
+func (l klogger) V(level int) logr.Logger {
 	new := l.clone()
 	new.level = level
 	return new
@@ -199,4 +199,3 @@
 }
 
 var _ logr.Logger = klogger{}
-var _ logr.InfoLogger = klogger{}
diff --git a/klogr/klogr_test.go b/klogr/klogr_test.go
index 712ac9c..38b4410 100644
--- a/klogr/klogr_test.go
+++ b/klogr/klogr_test.go
@@ -22,7 +22,7 @@
 	flag.Parse()
 
 	tests := map[string]struct {
-		klogr          logr.InfoLogger
+		klogr          logr.Logger
 		text           string
 		keysAndValues  []interface{}
 		expectedOutput string