Skip to content

Commit

Permalink
日志类
Browse files Browse the repository at this point in the history
  • Loading branch information
刘洪宝 committed Oct 19, 2018
1 parent d75b731 commit 3d4af75
Show file tree
Hide file tree
Showing 6 changed files with 960 additions and 37 deletions.
3 changes: 3 additions & 0 deletions .gitignore
@@ -1,2 +1,5 @@
.idea/
vendor/
bingo.log
example/bingo.log
size_coverage.out
70 changes: 52 additions & 18 deletions connector.go
Expand Up @@ -13,10 +13,10 @@ type Connector interface {
Error(message string)
Warning(message string)
Debug(message string)
Info(message string) // 打印
Output(message string) // 将信息输出到文件中
GetMessage(message string) string // 将输入的信息添加抬头(例如添加打印时间等)
GetFile(configs []string) *os.File // 当前日志要输出到的文件位置,传入一个数组代表配置
Info(message string) // 打印
Output(message string) // 将信息输出到文件中
GetMessage(message string) string // 将输入的信息添加抬头(例如添加打印时间等)
GetFile(config map[string]string) *os.File // 当前日志要输出到的文件位置,传入一个map 代表配置
}

// 分为5种日志级别
Expand All @@ -29,43 +29,77 @@ type Connector interface {
// 基类连接器,实现简单的输出方法
type BaseConnector struct{}

func (b *BaseConnector) Fatal(message string) {
func (b BaseConnector) Fatal(message string) {
// 红色输出
message = "[FATAL] " + b.GetMessage(message)
fmt.Println(clcolor.Red(message))
fmt.Print(clcolor.Red(message))
b.Output(message)
}
func (b *BaseConnector) Error(message string) {
func (b BaseConnector) Error(message string) {
// 紫色输出
message = "[ERROR] " + b.GetMessage(message)
fmt.Println(clcolor.Magenta(message))
fmt.Print(clcolor.Magenta(message))
b.Output(message)
}
func (b *BaseConnector) Warning(message string) {
func (b BaseConnector) Warning(message string) {
// 黄色输出
message = "[WARNING] " + b.GetMessage(message)
fmt.Println(clcolor.Yellow(message))
fmt.Print(clcolor.Yellow(message))
b.Output(message)
}
func (b *BaseConnector) Debug(message string) {
func (b BaseConnector) Debug(message string) {
// 蓝色输出
message = "[DEBUG] " + b.GetMessage(message)
fmt.Println(clcolor.Blue(message))
fmt.Print(clcolor.Blue(message))
b.Output(message)
}
func (b *BaseConnector) Info(message string) {
func (b BaseConnector) Info(message string) {
// 绿色输出在控制台
message = "[INFO] " + b.GetMessage(message)
fmt.Println(clcolor.Green(message))
fmt.Print(clcolor.Green(message))
// 输出在文件中
b.Output(message)
}

func (b *BaseConnector) GetMessage(message string) string {
func (b BaseConnector) GetMessage(message string) string {
// 将传入的信息扩展一下
// 默认添加当前时间
return "[" + time.Now().Format("2006-01-02 15:04:05") + "] " + message
return "[" + time.Now().Format("2006-01-02 15:04:05") + "] " + message + "\n"
}

func (b *BaseConnector) Output(message string) {
func (b BaseConnector) Output(message string) {
// 获取到要输出的文件路径
file := b.GetFile(make(map[string]string))
defer file.Close()
n, _ := file.Seek(0, os.SEEK_END)
// 写入数据
file.WriteAt([]byte(message), n)
}

func (b *BaseConnector) GetFile() *os.File {
// 返回一个文件句柄,用来写入数据
func (b BaseConnector) GetFile(config map[string]string) *os.File {
// 默认情况下,输出到当前路径下的bingo.log文件中
dir, err := os.Getwd()
if err != nil {
panic(err)
}
path := dir + "/bingo.log" // 真实要保存的文件位置
// 判断文件是否存在
if _, err := os.Stat(path); err != nil {
// 文件不存在,创建
f, err := os.Create(path)
//defer f.Close() // 关闭操作要放在调用位置
if err != nil {
panic(err)
}
return f
}
// 打开该文件,追加模式
f, err := os.OpenFile(path, os.O_WRONLY, os.ModeAppend)

if err != nil {
panic(err)
}

return f
}
120 changes: 120 additions & 0 deletions connector_test.go
@@ -0,0 +1,120 @@
package bingo_log

import (
"testing"
)

func TestBaseConnector_Fatal(t *testing.T) {
type args struct {
message string
}
tests := []struct {
name string
b BaseConnector
args args
}{
{
name: "case",
b: BaseConnector{},
args: struct{ message string }{message: "fatal testing"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := BaseConnector{}
b.Fatal(tt.args.message)
})
}
}

func TestBaseConnector_Error(t *testing.T) {
type args struct {
message string
}
tests := []struct {
name string
b BaseConnector
args args
}{
{
name: "case",
b: BaseConnector{},
args: struct{ message string }{message: "Error testing"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := BaseConnector{}
b.Error(tt.args.message)
})
}
}

func TestBaseConnector_Warning(t *testing.T) {
type args struct {
message string
}
tests := []struct {
name string
b BaseConnector
args args
}{
{
name: "case",
b: BaseConnector{},
args: struct{ message string }{message: "Warning testing"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := BaseConnector{}
b.Warning(tt.args.message)
})
}
}

func TestBaseConnector_Debug(t *testing.T) {
type args struct {
message string
}
tests := []struct {
name string
b BaseConnector
args args
}{
{
name: "case",
b: BaseConnector{},
args: struct{ message string }{message: "Debug testing"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := BaseConnector{}
b.Debug(tt.args.message)
})
}
}

func TestBaseConnector_Info(t *testing.T) {
type args struct {
message string
}
tests := []struct {
name string
b BaseConnector
args args
}{
{
name: "case",
b: BaseConnector{},
args: struct{ message string }{message: "Info testing"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := BaseConnector{}
b.Info(tt.args.message)
})
}
}
30 changes: 30 additions & 0 deletions example/main.go
@@ -0,0 +1,30 @@
package main

import (
"github.com/silsuer/bingo-log"
"strconv"
"fmt"
)

func main() {
//fmt.Println(os.Getwd())
//c:= bingo_log.NewLog(bingo_log.LogSyncMode)
//b := new(bingo_log.BaseConnector)
//c.LoadConnector(b) // 加载连接器
//c.Warning("ddd")
//c := bingo_log.NewLog(bingo_log.LogPoolMode)
c:= bingo_log.NewLog(bingo_log.LogSyncMode)
c.SetPoolExpiredTime(100)
c.SetPoolWorkerNum(100)

b := new(bingo_log.BaseConnector)
c.LoadConnector(b)

//s := sync.WaitGroup{}

for i := 0; i < 1000; i++ {
//s.Add()
c.Debug("这是第" + strconv.Itoa(i) + "次输入")
}
fmt.Println("Done!")
}

0 comments on commit 3d4af75

Please sign in to comment.