diff --git a/logs/color.go b/logs/color.go new file mode 100644 index 00000000..fb21b42e --- /dev/null +++ b/logs/color.go @@ -0,0 +1,28 @@ +// Copyright 2014 beego Author. All Rights Reserved. +// +// 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. + +// +build !windows + +package logs + +import "io" + +type ansiColorWriter struct { + w io.Writer + mode outputMode +} + +func (cw *ansiColorWriter) Write(p []byte) (int, error) { + return cw.w.Write(p) +} \ No newline at end of file diff --git a/logs/color_windows.go b/logs/color_windows.go index f6c6cad3..47f7b24e 100644 --- a/logs/color_windows.go +++ b/logs/color_windows.go @@ -25,7 +25,6 @@ import ( ) type ( - outputMode int csiState int parseResult int ) @@ -426,36 +425,4 @@ func (cw *ansiColorWriter) Write(p []byte) (int, error) { } return r, err -} - -// DiscardNonColorEscSeq supports the divided color escape sequence. -// But non-color escape sequence is not output. -// Please use the OutputNonColorEscSeq If you want to output a non-color -// escape sequences such as ncurses. However, it does not support the divided -// color escape sequence. -const ( - _ outputMode = iota - DiscardNonColorEscSeq - OutputNonColorEscSeq -) - -// NewAnsiColorWriter creates and initializes a new ansiColorWriter -// using io.Writer w as its initial contents. -// In the console of Windows, which change the foreground and background -// colors of the text by the escape sequence. -// In the console of other systems, which writes to w all text. -func NewAnsiColorWriter(w io.Writer) io.Writer { - return NewModeAnsiColorWriter(w, DiscardNonColorEscSeq) -} - -// NewModeAnsiColorWriter create and initializes a new ansiColorWriter -// by specifying the outputMode. -func NewModeAnsiColorWriter(w io.Writer, mode outputMode) io.Writer { - if _, ok := w.(*ansiColorWriter); !ok { - return &ansiColorWriter{ - w: w, - mode: mode, - } - } - return w } \ No newline at end of file diff --git a/logs/logger.go b/logs/logger.go index 499a5b39..d74df7bf 100644 --- a/logs/logger.go +++ b/logs/logger.go @@ -38,18 +38,54 @@ func (lg *logWriter) println(when time.Time, msg string) { lg.Unlock() } -const y1 = `0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999` -const y2 = `0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789` -const mo1 = `000000000111` -const mo2 = `123456789012` -const d1 = `0000000001111111111222222222233` -const d2 = `1234567890123456789012345678901` -const h1 = `000000000011111111112222` -const h2 = `012345678901234567890123` -const mi1 = `000000000011111111112222222222333333333344444444445555555555` -const mi2 = `012345678901234567890123456789012345678901234567890123456789` -const s1 = `000000000011111111112222222222333333333344444444445555555555` -const s2 = `012345678901234567890123456789012345678901234567890123456789` +type outputMode int + +// DiscardNonColorEscSeq supports the divided color escape sequence. +// But non-color escape sequence is not output. +// Please use the OutputNonColorEscSeq If you want to output a non-color +// escape sequences such as ncurses. However, it does not support the divided +// color escape sequence. +const ( + _ outputMode = iota + DiscardNonColorEscSeq + OutputNonColorEscSeq +) + +// NewAnsiColorWriter creates and initializes a new ansiColorWriter +// using io.Writer w as its initial contents. +// In the console of Windows, which change the foreground and background +// colors of the text by the escape sequence. +// In the console of other systems, which writes to w all text. +func NewAnsiColorWriter(w io.Writer) io.Writer { + return NewModeAnsiColorWriter(w, DiscardNonColorEscSeq) +} + +// NewModeAnsiColorWriter create and initializes a new ansiColorWriter +// by specifying the outputMode. +func NewModeAnsiColorWriter(w io.Writer, mode outputMode) io.Writer { + if _, ok := w.(*ansiColorWriter); !ok { + return &ansiColorWriter{ + w: w, + mode: mode, + } + } + return w +} + +const ( + y1 = `0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999` + y2 = `0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789` + mo1 = `000000000111` + mo2 = `123456789012` + d1 = `0000000001111111111222222222233` + d2 = `1234567890123456789012345678901` + h1 = `000000000011111111112222` + h2 = `012345678901234567890123` + mi1 = `000000000011111111112222222222333333333344444444445555555555` + mi2 = `012345678901234567890123456789012345678901234567890123456789` + s1 = `000000000011111111112222222222333333333344444444445555555555` + s2 = `012345678901234567890123456789012345678901234567890123456789` +) func formatTimeHeader(when time.Time) ([]byte, int) { y, mo, d := when.Date() @@ -149,4 +185,4 @@ func W32Debug(msg string) { w := NewAnsiColorWriter(os.Stdout) fmt.Fprintf(w, "[beego] %v %s\n", current.Format("2006/01/02 - 15:04:05"), msg) -} +} \ No newline at end of file diff --git a/logs/logger_test.go b/logs/logger_test.go index 4627853a..c65d70d5 100644 --- a/logs/logger_test.go +++ b/logs/logger_test.go @@ -17,6 +17,7 @@ package logs import ( "testing" "time" + "bytes" ) func TestFormatHeader_0(t *testing.T) { @@ -55,3 +56,20 @@ func TestFormatHeader_1(t *testing.T) { tm = tm.Add(dur) } } + +func TestNewAnsiColor1(t *testing.T) { + inner := bytes.NewBufferString("") + w := NewAnsiColorWriter(inner) + if w == inner { + t.Errorf("Get %#v, want %#v", w, inner) + } +} + +func TestNewAnsiColor2(t *testing.T) { + inner := bytes.NewBufferString("") + w1 := NewAnsiColorWriter(inner) + w2 := NewAnsiColorWriter(w1) + if w1 != w2 { + t.Errorf("Get %#v, want %#v", w1, w2) + } +} \ No newline at end of file