log: NewLogger moved to log package

This commit is contained in:
Michał Matczuk 2017-09-27 22:47:03 +02:00
parent 342b0b5f81
commit 15d593924b
5 changed files with 80 additions and 83 deletions

View file

@ -1,41 +0,0 @@
// Copyright (C) 2017 Michał Matczuk
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package cmd
import (
"io"
golog "log"
"os"
"github.com/mmatczuk/go-http-tunnel/log"
)
// NewLogger returns logfmt based logger, printing messages up to log level
// logLevel.
func NewLogger(to string, level int) (log.Logger, error) {
var w io.Writer
switch to {
case "none":
return log.NewNopLogger(), nil
case "stdout":
w = os.Stdout
case "stderr":
w = os.Stderr
default:
f, err := os.Create(to)
if err != nil {
return nil, err
}
w = f
}
golog.SetOutput(w)
var logger log.Logger
logger = log.NewStdLogger()
logger = log.NewFilterLogger(logger, level)
return logger, nil
}

View file

@ -16,7 +16,6 @@ import (
"github.com/cenkalti/backoff"
"github.com/mmatczuk/go-http-tunnel"
"github.com/mmatczuk/go-http-tunnel/cmd/cmd"
"github.com/mmatczuk/go-http-tunnel/id"
"github.com/mmatczuk/go-http-tunnel/log"
"github.com/mmatczuk/go-http-tunnel/proto"
@ -33,7 +32,7 @@ func main() {
return
}
logger, err := cmd.NewLogger(opts.logTo, opts.logLevel)
logger, err := log.NewLogger(opts.logTo, opts.logLevel)
if err != nil {
fatal("failed to init logger: %s", err)
}

View file

@ -14,8 +14,8 @@ import (
"golang.org/x/net/http2"
"github.com/mmatczuk/go-http-tunnel"
"github.com/mmatczuk/go-http-tunnel/cmd/cmd"
"github.com/mmatczuk/go-http-tunnel/id"
"github.com/mmatczuk/go-http-tunnel/log"
)
func main() {
@ -26,7 +26,7 @@ func main() {
return
}
logger, err := cmd.NewLogger(opts.logTo, opts.logLevel)
logger, err := log.NewLogger(opts.logTo, opts.logLevel)
if err != nil {
fatal("failed to init logger: %s", err)
}

49
log/context.go Normal file
View file

@ -0,0 +1,49 @@
// Copyright (C) 2017 Michał Matczuk
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package log
// Context is simplified version of go-kit log Context
// https://godoc.org/github.com/go-kit/kit/log#Context.
type Context struct {
prefix []interface{}
suffix []interface{}
logger Logger
}
// NewContext returns a logger that adds prefix before keyvals.
func NewContext(logger Logger) *Context {
return &Context{
prefix: make([]interface{}, 0),
suffix: make([]interface{}, 0),
logger: logger,
}
}
// With returns a new Context with keyvals appended to those of the receiver.
func (c *Context) With(keyvals ...interface{}) *Context {
return &Context{
prefix: c.prefix,
suffix: append(c.suffix, keyvals...),
logger: c.logger,
}
}
// WithPrefix returns a new Context with keyvals prepended to those of the
// receiver.
func (c *Context) WithPrefix(keyvals ...interface{}) *Context {
return &Context{
prefix: append(c.prefix, keyvals...),
suffix: c.suffix,
logger: c.logger,
}
}
// Log adds prefix and suffix to keyvals and calls internal logger.
func (c *Context) Log(keyvals ...interface{}) error {
var s []interface{}
s = append(c.prefix, keyvals...)
s = append(s, c.suffix...)
return c.logger.Log(s...)
}

View file

@ -4,6 +4,12 @@
package log
import (
"io"
"log"
"os"
)
// Logger is the fundamental interface for all log operations. Log creates a
// log event from keyvals, a variadic sequence of alternating keys and values.
// Implementations must be safe for concurrent use by multiple goroutines. In
@ -13,46 +19,30 @@ type Logger interface {
Log(keyvals ...interface{}) error
}
// Context is simplified version of go-kit log Context
// https://godoc.org/github.com/go-kit/kit/log#Context.
type Context struct {
prefix []interface{}
suffix []interface{}
logger Logger
}
// NewLogger returns logfmt based logger, printing messages up to log level
// logLevel.
func NewLogger(to string, level int) (Logger, error) {
var w io.Writer
// NewContext returns a logger that adds prefix before keyvals.
func NewContext(logger Logger) *Context {
return &Context{
prefix: make([]interface{}, 0),
suffix: make([]interface{}, 0),
logger: logger,
switch to {
case "none":
return NewNopLogger(), nil
case "stdout":
w = os.Stdout
case "stderr":
w = os.Stderr
default:
f, err := os.Create(to)
if err != nil {
return nil, err
}
w = f
}
}
// With returns a new Context with keyvals appended to those of the receiver.
func (c *Context) With(keyvals ...interface{}) *Context {
return &Context{
prefix: c.prefix,
suffix: append(c.suffix, keyvals...),
logger: c.logger,
}
}
log.SetOutput(w)
// WithPrefix returns a new Context with keyvals prepended to those of the
// receiver.
func (c *Context) WithPrefix(keyvals ...interface{}) *Context {
return &Context{
prefix: append(c.prefix, keyvals...),
suffix: c.suffix,
logger: c.logger,
}
}
// Log adds prefix and suffix to keyvals and calls internal logger.
func (c *Context) Log(keyvals ...interface{}) error {
var s []interface{}
s = append(c.prefix, keyvals...)
s = append(s, c.suffix...)
return c.logger.Log(s...)
var l Logger
l = NewStdLogger()
l = NewFilterLogger(l, level)
return l, nil
}