【REST2SQL】08 日志重构增加输出到文件log.txt

【REST2SQL】01RDB关系型数据库REST初设计
【REST2SQL】02 GO连接Oracle数据库
【REST2SQL】03 GO读取JSON文件
【REST2SQL】04 REST2SQL第一版Oracle版实现
【REST2SQL】05 GO 操作 达梦 数据库
【REST2SQL】06 GO 跨包接口重构代码
【REST2SQL】07 GO 操作 Mysql 数据库

原来的日志只输出到控制台,关闭控制台就没有了,重构一下,可以同时输出到控制台和磁盘文件log.txt.

1 创建日志包logger

【REST2SQL】08 日志重构增加输出到文件log.txt_第1张图片
在rest2sql/目录下创建日志子目录logger,在此目录下创建日志包文件logger.go,增加以下代码:

/*日志记录器*/

package logger

import (
	"fmt"
	"io"
	"log"
	"os"
	"strconv"
	"time"
)

// 日志计数器
var count int = 0

func Alog(isPrefix bool, logs ...interface{}) {
	fname := "Log" + time.Now().Format("2006-01-02") + ".txt"

	// 日志输出文件,没有log.txt会新建,有会追加日志
	file, err := os.OpenFile(fname, os.O_CREATE|os.O_APPEND|os.O_RDWR, os.ModePerm)
	if err != nil {
		return
	}
	defer file.Close()

	// 同时输出到标准输出流 和  文件
	multiWriter := io.MultiWriter(os.Stdout, file)
	log.SetOutput(multiWriter)

	//日志输出前缀
	if isPrefix {
		count++ //调用一次加1
		log.SetPrefix("   REST2SQL(" + strconv.Itoa(count) + ") @ ")
	}

	//日志输出内容
	logtext := ""
	for _, txt := range logs {
		logtext += fmt.Sprint(txt)
	}

	log.Printf(logtext)
}

2 调用示例

2.1 引用logger包

import ”rest2sql/logger“

2.2 需要写入日志的地方调用

// 打印配置信息
	logger.Alog(false, "config:", config.Conf)

		// 请求日志输入到标准输出 和 log.txt文件
		logstr := fmt.Sprintf(
			"\t\t%s\t\t%s\t\t%s\t\t%v",
			r.Method,
			r.RemoteAddr,
			r.RequestURI,
			time.Since(start),
		)
		logger.Alog(true,logstr)
		
//执行 sql并返回 json 结果
	logger.Alog(true, fmt.Sprint("deleteDel:", deleteSQL))

3 运行效果

3.1 控制台输出

【REST2SQL】08 日志重构增加输出到文件log.txt_第2张图片

3.2 日志文件记录

【REST2SQL】08 日志重构增加输出到文件log.txt_第3张图片

3.3 日志文件内容

【REST2SQL】08 日志重构增加输出到文件log.txt_第4张图片
OK ! ?

你可能感兴趣的:(REST2SQL,重构)