aboutsummaryrefslogtreecommitdiff
path: root/vendor/gopkg.in/clog.v1/console.go
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-02-09 19:48:13 -0500
committerUnknwon <u@gogs.io>2017-02-09 19:48:13 -0500
commit2fd69f13d9599a6c58b47225565163fd7d87889f (patch)
treefd19e868e1c2e95a5fb83a268f6e393669d6ee79 /vendor/gopkg.in/clog.v1/console.go
parenteb66060cd7b9bce996b1d75ae80ce1ef31d5ce62 (diff)
vendor: check in vendors
Bye bye glide...
Diffstat (limited to 'vendor/gopkg.in/clog.v1/console.go')
-rw-r--r--vendor/gopkg.in/clog.v1/console.go112
1 files changed, 112 insertions, 0 deletions
diff --git a/vendor/gopkg.in/clog.v1/console.go b/vendor/gopkg.in/clog.v1/console.go
new file mode 100644
index 00000000..0f9b7333
--- /dev/null
+++ b/vendor/gopkg.in/clog.v1/console.go
@@ -0,0 +1,112 @@
+// Copyright 2017 Unknwon
+//
+// 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.
+
+package clog
+
+import (
+ "log"
+
+ "github.com/fatih/color"
+)
+
+const CONSOLE MODE = "console"
+
+// Console color set for different levels.
+var consoleColors = []func(a ...interface{}) string{
+ color.New(color.FgBlue).SprintFunc(), // Trace
+ color.New(color.FgGreen).SprintFunc(), // Info
+ color.New(color.FgYellow).SprintFunc(), // Warn
+ color.New(color.FgRed).SprintFunc(), // Error
+ color.New(color.FgHiRed).SprintFunc(), // Fatal
+}
+
+type ConsoleConfig struct {
+ // Minimum level of messages to be processed.
+ Level LEVEL
+ // Buffer size defines how many messages can be queued before hangs.
+ BufferSize int64
+}
+
+type console struct {
+ *log.Logger
+ Adapter
+}
+
+func newConsole() Logger {
+ return &console{
+ Logger: log.New(color.Output, "", log.Ldate|log.Ltime),
+ Adapter: Adapter{
+ quitChan: make(chan struct{}),
+ },
+ }
+}
+
+func (c *console) Level() LEVEL { return c.level }
+
+func (c *console) Init(v interface{}) error {
+ cfg, ok := v.(ConsoleConfig)
+ if !ok {
+ return ErrConfigObject{"ConsoleConfig", v}
+ }
+
+ if !isValidLevel(cfg.Level) {
+ return ErrInvalidLevel{}
+ }
+ c.level = cfg.Level
+
+ c.msgChan = make(chan *Message, cfg.BufferSize)
+ return nil
+}
+
+func (c *console) ExchangeChans(errorChan chan<- error) chan *Message {
+ c.errorChan = errorChan
+ return c.msgChan
+}
+
+func (c *console) write(msg *Message) {
+ c.Logger.Print(consoleColors[msg.Level](msg.Body))
+}
+
+func (c *console) Start() {
+LOOP:
+ for {
+ select {
+ case msg := <-c.msgChan:
+ c.write(msg)
+ case <-c.quitChan:
+ break LOOP
+ }
+ }
+
+ for {
+ if len(c.msgChan) == 0 {
+ break
+ }
+
+ c.write(<-c.msgChan)
+ }
+ c.quitChan <- struct{}{} // Notify the cleanup is done.
+}
+
+func (c *console) Destroy() {
+ c.quitChan <- struct{}{}
+ <-c.quitChan
+
+ close(c.msgChan)
+ close(c.quitChan)
+}
+
+func init() {
+ Register(CONSOLE, newConsole)
+}