debug/log: remove stale files
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		| @@ -1,58 +0,0 @@ | |||||||
| // Package log provides debug logging |  | ||||||
| package log |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"encoding/json" |  | ||||||
| 	"fmt" |  | ||||||
| 	"time" |  | ||||||
|  |  | ||||||
| 	"github.com/unistack-org/micro/v3/metadata" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| var ( |  | ||||||
| 	// Default buffer size if any |  | ||||||
| 	DefaultSize = 256 |  | ||||||
| 	// Default formatter |  | ||||||
| 	DefaultFormat = TextFormat |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // Log is debug log interface for reading and writing logs |  | ||||||
| type Log interface { |  | ||||||
| 	// Read reads log entries from the logger |  | ||||||
| 	Read(...ReadOption) ([]Record, error) |  | ||||||
| 	// Write writes records to log |  | ||||||
| 	Write(Record) error |  | ||||||
| 	// Stream log records |  | ||||||
| 	Stream() (Stream, error) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Record is log record entry |  | ||||||
| type Record struct { |  | ||||||
| 	// Timestamp of logged event |  | ||||||
| 	Timestamp time.Time `json:"timestamp"` |  | ||||||
| 	// Metadata to enrich log record |  | ||||||
| 	Metadata metadata.Metadata `json:"metadata"` |  | ||||||
| 	// Value contains log entry |  | ||||||
| 	Message interface{} `json:"message"` |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Stream returns a log stream |  | ||||||
| type Stream interface { |  | ||||||
| 	Chan() <-chan Record |  | ||||||
| 	Stop() error |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Format is a function which formats the output |  | ||||||
| type FormatFunc func(Record) string |  | ||||||
|  |  | ||||||
| // TextFormat returns text format |  | ||||||
| func TextFormat(r Record) string { |  | ||||||
| 	t := r.Timestamp.Format("2006-01-02 15:04:05") |  | ||||||
| 	return fmt.Sprintf("%s %v", t, r.Message) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // JSONFormat is a json Format func |  | ||||||
| func JSONFormat(r Record) string { |  | ||||||
| 	b, _ := json.Marshal(r) |  | ||||||
| 	return string(b) |  | ||||||
| } |  | ||||||
| @@ -1,115 +0,0 @@ | |||||||
| // Package memory provides an in memory log buffer |  | ||||||
| package memory |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
|  |  | ||||||
| 	"github.com/unistack-org/micro/v3/debug/log" |  | ||||||
| 	"github.com/unistack-org/micro/v3/metadata" |  | ||||||
| 	"github.com/unistack-org/micro/v3/util/ring" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| // memoryLog is default micro log |  | ||||||
| type memoryLog struct { |  | ||||||
| 	*ring.Buffer |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // NewLog returns default Logger with |  | ||||||
| func NewLog(opts ...log.Option) log.Log { |  | ||||||
| 	// get default options |  | ||||||
| 	options := log.DefaultOptions() |  | ||||||
|  |  | ||||||
| 	// apply requested options |  | ||||||
| 	for _, o := range opts { |  | ||||||
| 		o(&options) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return &memoryLog{ |  | ||||||
| 		Buffer: ring.New(options.Size), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Write writes logs into logger |  | ||||||
| func (l *memoryLog) Write(r log.Record) error { |  | ||||||
| 	l.Buffer.Put(fmt.Sprint(r.Message)) |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Read reads logs and returns them |  | ||||||
| func (l *memoryLog) Read(opts ...log.ReadOption) ([]log.Record, error) { |  | ||||||
| 	options := log.ReadOptions{} |  | ||||||
| 	// initialize the read options |  | ||||||
| 	for _, o := range opts { |  | ||||||
| 		o(&options) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	var entries []*ring.Entry |  | ||||||
| 	// if Since options ha sbeen specified we honor it |  | ||||||
| 	if !options.Since.IsZero() { |  | ||||||
| 		entries = l.Buffer.Since(options.Since) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// only if we specified valid count constraint |  | ||||||
| 	// do we end up doing some serious if-else kung-fu |  | ||||||
| 	// if since constraint has been provided |  | ||||||
| 	// we return *count* number of logs since the given timestamp; |  | ||||||
| 	// otherwise we return last count number of logs |  | ||||||
| 	if options.Count > 0 { |  | ||||||
| 		switch len(entries) > 0 { |  | ||||||
| 		case true: |  | ||||||
| 			// if we request fewer logs than what since constraint gives us |  | ||||||
| 			if options.Count < len(entries) { |  | ||||||
| 				entries = entries[0:options.Count] |  | ||||||
| 			} |  | ||||||
| 		default: |  | ||||||
| 			entries = l.Buffer.Get(options.Count) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	records := make([]log.Record, 0, len(entries)) |  | ||||||
| 	for _, entry := range entries { |  | ||||||
| 		record := log.Record{ |  | ||||||
| 			Timestamp: entry.Timestamp, |  | ||||||
| 			Message:   entry.Value, |  | ||||||
| 		} |  | ||||||
| 		records = append(records, record) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return records, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Stream returns channel for reading log records |  | ||||||
| // along with a stop channel, close it when done |  | ||||||
| func (l *memoryLog) Stream() (log.Stream, error) { |  | ||||||
| 	// get stream channel from ring buffer |  | ||||||
| 	stream, stop := l.Buffer.Stream() |  | ||||||
| 	// make a buffered channel |  | ||||||
| 	records := make(chan log.Record, 128) |  | ||||||
| 	// get last 10 records |  | ||||||
| 	last10 := l.Buffer.Get(10) |  | ||||||
|  |  | ||||||
| 	// stream the log records |  | ||||||
| 	go func() { |  | ||||||
| 		// first send last 10 records |  | ||||||
| 		for _, entry := range last10 { |  | ||||||
| 			records <- log.Record{ |  | ||||||
| 				Timestamp: entry.Timestamp, |  | ||||||
| 				Message:   entry.Value, |  | ||||||
| 				Metadata:  metadata.New(0), |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		// now stream continuously |  | ||||||
| 		for entry := range stream { |  | ||||||
| 			records <- log.Record{ |  | ||||||
| 				Timestamp: entry.Timestamp, |  | ||||||
| 				Message:   entry.Value, |  | ||||||
| 				Metadata:  metadata.New(0), |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	}() |  | ||||||
|  |  | ||||||
| 	return &logStream{ |  | ||||||
| 		stream: records, |  | ||||||
| 		stop:   stop, |  | ||||||
| 	}, nil |  | ||||||
| } |  | ||||||
| @@ -1,32 +0,0 @@ | |||||||
| package memory |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"reflect" |  | ||||||
| 	"testing" |  | ||||||
|  |  | ||||||
| 	"github.com/unistack-org/micro/v3/debug/log" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| func TestLogger(t *testing.T) { |  | ||||||
| 	// set size to some value |  | ||||||
| 	size := 100 |  | ||||||
| 	// override the global logger |  | ||||||
| 	lg := NewLog(log.Size(size)) |  | ||||||
| 	// make sure we have the right size of the logger ring buffer |  | ||||||
| 	if lg.(*memoryLog).Size() != size { |  | ||||||
| 		t.Errorf("expected buffer size: %d, got: %d", size, lg.(*memoryLog).Size()) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Log some cruft |  | ||||||
| 	lg.Write(log.Record{Message: "foobar"}) |  | ||||||
| 	lg.Write(log.Record{Message: "foo bar"}) |  | ||||||
|  |  | ||||||
| 	// Check if the logs are stored in the logger ring buffer |  | ||||||
| 	expected := []string{"foobar", "foo bar"} |  | ||||||
| 	entries, _ := lg.Read(log.Count(len(expected))) |  | ||||||
| 	for i, entry := range entries { |  | ||||||
| 		if !reflect.DeepEqual(entry.Message, expected[i]) { |  | ||||||
| 			t.Errorf("expected %s, got %s", expected[i], entry.Message) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @@ -1,24 +0,0 @@ | |||||||
| package memory |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"github.com/unistack-org/micro/v3/debug/log" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| type logStream struct { |  | ||||||
| 	stream <-chan log.Record |  | ||||||
| 	stop   chan bool |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (l *logStream) Chan() <-chan log.Record { |  | ||||||
| 	return l.stream |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (l *logStream) Stop() error { |  | ||||||
| 	select { |  | ||||||
| 	case <-l.stop: |  | ||||||
| 		return nil |  | ||||||
| 	default: |  | ||||||
| 		close(l.stop) |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
| @@ -1,23 +0,0 @@ | |||||||
| package noop |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"github.com/unistack-org/micro/v3/debug/log" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| type noop struct{} |  | ||||||
|  |  | ||||||
| func (n *noop) Read(...log.ReadOption) ([]log.Record, error) { |  | ||||||
| 	return nil, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (n *noop) Write(log.Record) error { |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (n *noop) Stream() (log.Stream, error) { |  | ||||||
| 	return nil, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func NewLog(opts ...log.Option) log.Log { |  | ||||||
| 	return new(noop) |  | ||||||
| } |  | ||||||
| @@ -1,70 +0,0 @@ | |||||||
| package log |  | ||||||
|  |  | ||||||
| import "time" |  | ||||||
|  |  | ||||||
| // Option used by the logger |  | ||||||
| type Option func(*Options) |  | ||||||
|  |  | ||||||
| // Options are logger options |  | ||||||
| type Options struct { |  | ||||||
| 	// Name of the log |  | ||||||
| 	Name string |  | ||||||
| 	// Size is the size of ring buffer |  | ||||||
| 	Size int |  | ||||||
| 	// Format specifies the output format |  | ||||||
| 	Format FormatFunc |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Name of the log |  | ||||||
| func Name(n string) Option { |  | ||||||
| 	return func(o *Options) { |  | ||||||
| 		o.Name = n |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Size sets the size of the ring buffer |  | ||||||
| func Size(s int) Option { |  | ||||||
| 	return func(o *Options) { |  | ||||||
| 		o.Size = s |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func Format(f FormatFunc) Option { |  | ||||||
| 	return func(o *Options) { |  | ||||||
| 		o.Format = f |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // DefaultOptions returns default options |  | ||||||
| func DefaultOptions() Options { |  | ||||||
| 	return Options{ |  | ||||||
| 		Size: DefaultSize, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ReadOptions for querying the logs |  | ||||||
| type ReadOptions struct { |  | ||||||
| 	// Since what time in past to return the logs |  | ||||||
| 	Since time.Time |  | ||||||
| 	// Count specifies number of logs to return |  | ||||||
| 	Count int |  | ||||||
| 	// Stream requests continuous log stream |  | ||||||
| 	Stream bool |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ReadOption used for reading the logs |  | ||||||
| type ReadOption func(*ReadOptions) |  | ||||||
|  |  | ||||||
| // Since sets the time since which to return the log records |  | ||||||
| func Since(s time.Time) ReadOption { |  | ||||||
| 	return func(o *ReadOptions) { |  | ||||||
| 		o.Since = s |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Count sets the number of log records to return |  | ||||||
| func Count(c int) ReadOption { |  | ||||||
| 	return func(o *ReadOptions) { |  | ||||||
| 		o.Count = c |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
		Reference in New Issue
	
	Block a user