gost_software/log.go
2015-03-22 22:21:28 +08:00

51 lines
842 B
Go

package main
import (
"bytes"
"fmt"
"io"
"os"
)
type BufferedLog struct {
buffer *bytes.Buffer
w io.WriteCloser
}
func NewLog() *BufferedLog {
return &BufferedLog{
buffer: &bytes.Buffer{},
w: os.Stdout,
}
}
func NewFileLog(file *os.File) *BufferedLog {
return &BufferedLog{
buffer: &bytes.Buffer{},
w: file,
}
}
func (log *BufferedLog) Log(a ...interface{}) (int, error) {
return fmt.Fprint(log.buffer, a...)
}
func (log *BufferedLog) Logln(a ...interface{}) (int, error) {
return fmt.Fprintln(log.buffer, a...)
}
func (log *BufferedLog) Logf(format string, a ...interface{}) (int, error) {
return fmt.Fprintf(log.buffer, format, a...)
}
func (log *BufferedLog) Flush() error {
defer func() {
if log.w != os.Stdout {
log.w.Close()
}
}()
_, err := log.buffer.WriteTo(log.w)
return err
}